记录编号 |
173984 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[東方S1] 琪露诺 |
最终得分 |
100 |
用户昵称 |
神利·代目 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.054 s |
提交时间 |
2015-07-30 21:18:32 |
内存使用 |
4.28 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
struct queue
{
int id,w;
}q[222222];
int n,l=1,r,s,t,maxl,id,a[200001],last[200001],f[200001],temp;
bool flag;
char c;
inline int in()
{
temp=0;c=getchar();
while(c<48||c>57)
{
if(c==45)
flag=1;
c=getchar();
}
for(;c>=48&&c<=57;c=getchar())
temp=temp*10+c-48;
if(flag)
{
flag=0;
return -temp;
}
return temp;
}
void digui(int i)
{
if(!i)
{
printf("%d ",i);
return;
}
digui(last[i]);
printf("%d ",i);
}
int main()
{
freopen("iceroad.in","r",stdin);
freopen("iceroad.out","w",stdout);
n=in();s=in();t=in();
for(int i=0;i<=n;++i)
{
a[i]=in();
while(q[l].id<i-t)
++l;
if(i>=s)
{
if(l>r)
{
q[++r].w=f[i-s];
q[r].id=i-s;
}
else
while(l<=r&&q[r].w<f[i-s])
--r;
q[++r].w=f[i-s];
q[r].id=i-s;
f[i]=q[l].w+a[i];
last[i]=q[l].id;
}
}
for(int i=n-t+1;i<=n;++i)
if(maxl<f[i])
{
maxl=f[i];
id=i;
}
printf("%d\n",maxl);
digui(id);
printf("-1");
//while(1);
}