记录编号 173984 评测结果 AAAAAAAAAA
题目名称 [東方S1] 琪露诺 最终得分 100
用户昵称 Gravatar神利·代目 是否通过 通过
代码语言 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);
}