记录编号 |
174139 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[東方S1] 琪露诺 |
最终得分 |
100 |
用户昵称 |
forever |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.057 s |
提交时间 |
2015-07-31 14:41:56 |
内存使用 |
3.36 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdlib>
using namespace std;
int n,l,r,f[200005];
int a[200005],q[200005];
int pre[200005];
int t,tail,head,temp,ans,num,id,flag,temp1;
char c;
inline int in()
{
temp1=0;c=getchar();
while(c<48||c>57)
{
if(c==45)
flag=1;
c=getchar();
}
for(;c>=48&&c<=57;c=getchar())
temp1=temp1*10+c-48;
if(flag)
{
flag=0;
return -temp1;
}
return temp1;
}
void print(int y){
if(pre[y]!=-1){
print(pre[y]);
}
printf("%d ",y);
}
int main(){
freopen("iceroad.in","r",stdin);
freopen("iceroad.out","w",stdout);
n=in(),l=in(),r=in();
t=in();
a[0]=t;
for(int i=1;i<=n;++i){
a[i]=in();
}
ans=-9999999;
memset(pre,-1,sizeof(pre));
head=0,tail=0;
q[tail++]=0;
for(int i=l;i<=n;++i)
{
if(i-l>0){
while(tail>head&&(q[head]>i||(i-q[head])>r||(i-q[head])<l)) head++;
temp=f[i-l];
while(tail>head&&temp>f[q[tail-1]]) tail--;
q[tail++]=i-l;
pre[i]=q[head];
f[i]=f[q[head]]+a[i];
if(f[i]>ans){
ans=f[i];
id=i;
}
}
}
printf("%d\n",ans);
//cout<<id<<endl;
print(id);
printf("-1");
}