#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int s[N],num[N],q[N];
int main()//求限长为m的最大子串和(可以不选)
{
int n,m; cin>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
s[i]=s[i-1]+x;
}
int head=1,tail=0;
int ans=0;
for(int i=1;i<=n;i++)
{
while(num[head]<i-m&&head<=tail) head++;
while(q[tail]>s[i]&&head<=tail) tail--;
ans=max(ans,s[i]-q[head]);
num[++tail]=i;
q[tail]=s[i];
}
cout<<ans;
}
限长最大子串和
最新推荐文章于 2024-11-11 16:07:51 发布