Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define setIO(s) freopen(s".in","r",stdin)
#define N 100010
#define ll long long
using namespace std;
ll n, k, maxn, ans, head = 1, tail = 1;
ll c[N], sum[N], dp[N], q[N], a[N];
ll max(ll a,ll b )
{
return a > b ? a : b;
}
int main() {
// setIO("input");
scanf( "%lld%lld", &n, &k );
for(ll i = 1; i <= n; i++ )
{
scanf( "%lld", &c[i] );
sum[i] = sum[i - 1] + c[i];
}
ll ans=0;
for(ll i = 1; i <= n + 1; i++ ) {
while( head <= tail && q[head] < i - k - 1 ) head++;
dp[i] = dp[q[head]] - sum[q[head]] + sum[i - 1];
ans=max(ans,dp[i]);
while( head <= tail && dp[q[tail]] - sum[q[tail]] <= dp[i] - sum[i] ) tail--;
q[++tail] = i;
}
printf( "%lld\n", ans);
return 0;
}