CHOI1201 最大子序和
水。。。
#include<bits/stdc++.h> using namespace std; const int N=300005,inf=2147483647; int q[N],a[N],s[N]; int main(){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=n;++i)scanf("%d",&a[i]),s[i]=s[i-1]+a[i]; int l=1,r=1,ans=-inf;q[r]=0; for(int i=1;i<=n;++i){ while(l<=r&&i-q[l]>m)++l; while(l<=r&&s[i]<=s[q[r]])--r; q[++r]=i; ans=max(ans,s[i]-s[q[l]]); } printf("%d",ans); return 0; }