@[Exile_Code](/user/819682) 同问
```cpp
#include<iostream>
#include<deque>
using namespace std;
long long a[200010],f[200010];
struct Node{long long num,id;};
int main()
{
int n,l,r;
scanf("%d%d%d",&n,&l,&r);
for (int i = 0;i <= n;i++)
scanf("%lld",&a[i]);
for (int i = 0;i < l;i++)
f[i] = 0;
deque<Node> maxn;
for (int i = l;i <= n;i++)
{
if (!maxn.empty() && maxn.front().id < i - r)
maxn.pop_front();
Node t;
t.id = i;
t.num = f[i - l];
while(!maxn.empty() && maxn.back().num < t.num)
maxn.pop_back();
maxn.push_back(t);
f[i] = max(f[i],maxn.front().num + a[i]);
}
long long ans = -1e18;
for (int i = 1;i <= n;i++)
ans = max(ans,f[i]);
printf("%lld\n",ans);
return 0;
}
```
by codejiahui @ 2023-11-11 17:40:36
@[Exile_Code](/user/819682) 我是后面bug了,你是前面
by codejiahui @ 2023-11-11 17:41:45
@[codejiahui](/user/512407) 我找到错误了,第一个while应该是i-l&&f[q.back()]<f[i-l],我写的是i-r,写错了
by Exile_Code @ 2023-11-11 19:23:00
给你改了一下,打注释的地方是修改的,现在可以过了
```cpp
#include<iostream>
#include<deque>
using namespace std;
long long a[200010],f[200010];
struct Node{long long num,id;};
int main()
{
int n,l,r;
scanf("%d%d%d",&n,&l,&r);
for (int i = 0;i <= n;i++)
scanf("%lld",&a[i]);
for (int i = 1;i < l;i++)
f[i] = -9999999; //
deque<Node> maxn;
for (int i = l;i <= n;i++){
Node t;
t.id = i-l; //
t.num = f[i - l];
while(!maxn.empty() && maxn.back().num <= t.num)
maxn.pop_back();
if (!maxn.empty() && maxn.front().id < i - r)
maxn.pop_front();
maxn.push_back(t);
f[i] = maxn.front().num + a[i]; //
}
long long ans = -1e8;
for (int i = 1;i <= n;i++)
if(i+r>n) //
ans = max(ans,f[i]);
printf("%lld\n",ans);
return 0;
}
```
@[codejiahui](/user/512407)
by Exile_Code @ 2023-11-11 19:37:45