长度为n 的整数序列 要求从中找出一段连续的长度不超过m的子序列,使得这个序列的和最大
#include <iostream> using namespace std; const int N=2e5+3; #define int long long int a[N],s[N],f[N],n,m; int ans; int hh,tt,q[N]; void solve(){ hh=0,tt=0; ans=-1e18; if(n<=m) ans=max(ans,s[n]); for(int i=1;i<=n;i++){ while(hh<=tt&&q[hh]<i-m) hh++; ans=max(ans,s[i]-s[q[hh]]); while(hh<=tt&&s[i]<s[q[tt]]) tt--; q[++tt]=i; } cout<<ans<<endl; } main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i],s[i]=s[i-1]+a[i]; solve(); }