这是《深入浅出进阶篇》P227 例3的 std,除了读入代码以外均相同
(自己写了一遍,看书上代码不对劲所以下载了hack后将书上代码本地测了一遍,没有抄题解,提交的都是自己写的代码)
#include<bits/stdc++.h>
#define MAXN 200010
using namespace std;
int a[MAXN],n,l,r,f[MAXN],L,R,q[MAXN];
int main(){
freopen("P1725_1.in", "r", stdin);
//freopen(".out", "w", stdout);
scanf("%d%d%d",&n,&l,&r);
for(int i=0;i<=n;i++)scanf("%d",&a[i]);
L=0,R=-1;
for(int i=l;i<=n;i++){
for(;L<=R&&f[i-l]>f[q[R]];R--);
q[++R]=i-l;
for(;L<=R&&q[L]<i-r;L++);
f[i]=f[q[L]]+a[i];
}
int ans=0;
for(int i=n+1-r;i<=n;i++)ans=max(ans,f[i]);
cout<<ans;
//fclose(stdin);
//fclose(stdout);
return 0;}
下载的hack:
P1725_1.in:
6 2 2
0 1 -1 1 -1 1 -1
P1725_1.out:
-3