#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int l,r;
long long f[N][2];
long long sum[N];
int x;
long long q[N];
int main(){
int n;
cin>>n;
int k;
cin>>k;
r=0;
l=1;
for(int i=1;i<=n;i++){
cin>>x;
sum[i]=sum[i-1]+x;
}
for(int i=1;i<=n;i++){
f[i][0]=max(f[i-1][0],f[i-1][1]);
while(q[l]<i-k&&l<=r){
l++;
}
f[i][1]=f[q[l]][0]-sum[q[l]]+sum[i];
if(l>r){
r++;
q[r]=i;
}
else{
while(l<=r&&f[i][0]-sum[i]>f[q[r]][0]-sum[q[r]]) {
r--;
}
r++;
q[r]=i;
}
}
cout<<max(f[n][0],f[n][1]);
return 0;
}
为什么把r的初值改为1就过了