记录编号 599521 评测结果 AAAAAAAAAA
题目名称 [東方S1] 琪露诺 最终得分 100
用户昵称 Gravatar徐诗畅 是否通过 通过
代码语言 C++ 运行时间 0.186 s
提交时间 2025-03-20 07:01:37 内存使用 4.96 MiB
显示代码纯文本
#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(en){
		res.push(en);
		en=road[en];
	}
	while(!res.empty()){
		printf("%d ",res.top()); res.pop();
	} cout<<-1;
	return 0;
}