AcWing135. 最大子序和 | ybt1598:【 例 2】最大连续和

#include <bits/stdc++.h>
using namespace std;
const int N=3e5+10;
typedef long long ll;
int n,m;
ll s[N];
int q[N];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%lld",&s[i]);
        s[i]+=s[i-1];
    }
    int hh=0,tt=-1;
    ll res=-1e18;
    q[++tt]=0;
    for(int i=1;i<=n;i++){
        while(hh<=tt&&q[hh]<i-m) hh++;
        res=max(res,s[i]-s[q[hh]]);
        while(hh<=tt&&s[q[tt]]>=s[i]) tt--;
        q[++tt]=i;
    }
    printf("%lld\n",res);
    return 0;
}
posted @ 2025-03-23 10:36  九三青梧  阅读(9)  评论(0)    收藏  举报