一个常数巨大的 O(nlogn) 做法不开 O2 在 c++14 下都跑过了此题。
Link
#include <bits/stdc++.h>
using namespace std;
int n,m;
priority_queue<pair<int,int> > pq;
const int maxn=5e5+5;
int a[maxn];
int ans;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",a+i),a[i]+=a[i-1];
pq.push({0,0});
for(int i=1;i<=n;++i){
while(i-pq.top().second>m) pq.pop();
ans=max(ans,a[i]+pq.top().first);
pq.push({-a[i],i});
}
printf("%d",ans);
}