切蛋糕

题目链接:https://www.luogu.com.cn/problem/P1714

题意:

在长度为n的数组中求区间窗口小于等于m的区间最大和

思路:

单调队列+前/后缀和优化
枚举区间右端点,然后对于最左端点与右端点之间进行后缀的单调队列即可

void solve(){
    cin>>n>>m;
    rep(i,1,n){
        cin>>a[i];
    }
    for(int i=n;i>=1;i--){
        suf[i]=suf[i+1]+a[i];
    }
    deque<int>q;
    rep(i,1,n){
        int r=i;
        int l=0;
        while(q.size()&&q.back()<suf[i]){
            q.pop_back();
        }
        q.pb(suf[i]);
        if(i>m&&q.front()==suf[i-m])q.pop_front();

        l=q.front();

        ans=max(ans,l-suf[r+1]);
    }

    cout<<ans<<endl;
}
posted @ 2025-04-24 19:46  Marinaco  阅读(10)  评论(0)    收藏  举报
//雪花飘落效果