码迷,mamicode.com
首页 > 其他好文 > 详细

P3594 [POI2015]WIL-Wilcze do?y

时间:2019-08-23 22:29:20      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:区间   删除   info   http   mamicode   cout   pre   alt   out   

技术图片

————————————————————————————————————————————————————

修改一次的单调队列,借助单调队列求出区间内删除达到的最大值,再借助连续增长的l,r求解,挺好的题

——————————————————————————————————————————————————

#include<bits/stdc++.h>
using namespace std;
long long a[2000005],n,p,d,sum[2000005],q[2000005],last=1,hd,tl,t[2000005],ans;
int main()
{
    cin>>n>>p>>d;
    for(int i=1;i<=n;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];}
    for(int i=d;i<=n;i++)t[i]=sum[i]-sum[i-d];
    ans=d;q[++tl]=d;
    for(int i=d+1;i<=n;i++)
    {
        while(hd<=tl&&t[q[tl]]<t[i])tl--;
        q[++tl]=i;
        while(hd<=tl&&q[hd]-d+1<last)hd++;
        while(hd<=tl&&sum[i]-sum[last-1]-t[q[hd]]>p)
        {
            last++;
            while(hd<=tl&&q[hd]-d+1<last)hd++;
        }
        ans=max(i-last+1,ans);
    }
    cout<<ans;
}

 

P3594 [POI2015]WIL-Wilcze do?y

标签:区间   删除   info   http   mamicode   cout   pre   alt   out   

原文地址:https://www.cnblogs.com/SFWR-YOU/p/11402662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!