记录编号 |
599512 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[東方S1] 琪露诺 |
最终得分 |
100 |
用户昵称 |
djyqjy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.107 s |
提交时间 |
2025-03-18 22:09:30 |
内存使用 |
4.37 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
inline int re()
{
int f=1,num=0;
char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') num=num*10+c-'0',c=getchar();
return num*f;
}
const int N=200010;
int n,L,R;
int a[N];
pair<int,int> dp[N];
deque<pair<int,int> > q;
int main()
{
freopen("iceroad.in","r",stdin);
freopen("iceroad.out","w",stdout);
n=re();L=re();R=re();
for(int i=0;i<=n;i++) a[i]=re();
q.push_back(make_pair(n+1,0));
for(int i=n;i>=0;i--)
{
while(!q.empty()&&q.front().first>i+R) q.pop_front();
if(i+L<=n)
{
while(!q.empty()&&q.back().second<=dp[i+L].first) q.pop_back();
q.push_back(make_pair(i+L,dp[i+L].first));
}
if(!q.empty())
{
dp[i].first=q.front().second+a[i];
dp[i].second=q.front().first;
}
}
printf("%d\n",dp[0].first);
int p=0;
while(1)
{
printf("%d ",p);
p=dp[p].second;
if(p==n+1)
{
printf("-1");
return 0;
}
}
return 0;
}