测试数据
#include<iostream>
#include<deque>
using namespace std;
int n,m;
int a[500005],nax=0;
int b[500005];
deque<int> dq;
void show(deque<int> dq)
{
while(!dq.empty())
{
cout<<dq.front()<<" ";
dq.pop_front();
}
cout<<endl;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=b[i-1]+a[i];
}
if(a[1]>0)
{
nax=a[1];
dq.push_back(1);
}
for(int i=2;i<=n;i++)
{
if(a[i]<0)
continue;
else
{
dq.push_back(i);
if(dq.front()+1!=dq.back()&&dq.front()!=dq.back())
{
int aa=a[dq.front()];
int bb=a[dq.back()];
if(dq.size()>2)
{
if(dq.back()-dq.front()>=m)
{
int p,q;
dq.pop_back();
p=b[dq.back()]-b[dq.front()]+a[dq.front()];
q=b[i]-b[dq.back()]+a[i];
if(q>=p)
{
dq.pop_front();
dq.push_back(i);
}
}
else
{
dq.pop_back();
dq.pop_back();
dq.push_back(i);
}
}
int c=b[dq.back()]-b[dq.front()]+a[dq.front()];
nax=max(aa,bb);
nax=max(nax,c);
if(nax==aa)
{
dq.pop_back();
}
else if(nax==bb)
{
dq.pop_front();
}
}
}
}
cout<<nax<<'\n';
return 0;
}