#include<iostream>
#include<cstdio>
using namespace std;
long long a[100005];
long long sum[100005];
long long f[100005][2];
long long q[200005];
int main()
{
int i,n,k,head,tail;
cin>>n>>k;
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sum[i]=sum[i-1]+a[i];
}
for(i=1;i<=n;i++)
{
f[i][0]=max(f[i-1][0],f[i-1][1]);
while(q[head]<i-k&&head<=tail) head++;
f[i][1]=f[q[head]][0]-sum[q[head]]+sum[i];
while(f[i][0]-sum[i]>=f[q[tail]][0]-sum[q[tail]]&&head<=tail) tail--;//>或者>=没有什么关系,可以自己模拟一下证明
q[++tail]=i;
}
cout<<max(f[n][0],f[n][1]);
return 0;
}
1599修剪草坪
最新推荐文章于 2023-09-30 19:21:30 发布