比赛 2025.3.18 评测结果 WWWWWWWWWW
题目名称 琪露诺 最终得分 0
用户昵称 徐诗畅 运行时间 0.156 s
代码语言 C++ 内存使用 4.86 MiB
提交时间 2025-03-18 22:04:23
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,l,r,a[N],f[N],ans=-0x3f3f3f3f;
int q[N],h=1,t=0;
int road[N],en;
stack<int> res; 
int main(){
	freopen("iceroad.in","r",stdin);
	freopen("iceroad.out","w",stdout);
	scanf("%d%d%d",&n,&l,&r);
    memset(f,-0x3f3f3f3f,sizeof(f));
    f[0]=0; 
	for(int i = 0;i<=n;i++) scanf("%d",&a[i]);
	for(int i = l;i<=n;i++){
		while(h<=t&&q[h]<i-r) h++;
		while(h<=t&&f[q[t]]<f[i-l]) t--;
		q[++t]=i-l;
		int j = q[h];
		f[i]=f[j]+a[i]; road[i]=j;
		if(i+r>n){
			if(f[i]>=ans) ans=f[i],en=i;
		}
	}
	printf("%d\n%d ",ans,0);
	while(road[en]){
		res.push(road[en]);
		en=road[en];
	}
	while(!res.empty()){
		printf("%d ",res.top()); res.pop();
	} cout<<-1;
	return 0;
}