1 条题解

  • 0
    @ 2025-10-8 16:56:01

    E12 单调队列 连续子序列的最大和

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=310000;
    LL f[N],s[N];
    int q[N];
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        s[0]=0;for(int i=1;i<=n;i++)scanf("%lld",&s[i]),s[i]=s[i-1]+s[i];
        int l=1,r=1;q[1]=0;f[0]=0;
        LL ans=-1ll<<60;
        for(int i=1;i<=n;i++)
        {
            while(l<=r && i-q[l]>m ) l++;
            ans=max(ans,s[i]-s[q[l]]);
    		while(l<=r && s[q[r]]>=s[i] ) r--; 
            q[++r]=i; 
        }
        printf("%lld\n",ans);
        return 0;
    }
    
    • 1

    E12*【单调队列】长度不超过m的最大连续子段

    信息

    ID
    1274
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    305
    已通过
    68
    上传者