BZOJ4385 : [POI2015]Wilcze doły
2016-03-13 02:34
435 查看
求出前缀和$s$,设$f[i]=s[i+d-1]-s[i-1]$。
从左到右枚举的右端点$i$,左端点$j$满足单调性,若$s[i]-s[j-1]-\max(区间内最大的f)\leq p$,则可行。
用单调队列维护即可,时间复杂度$O(n)$。
从左到右枚举的右端点$i$,左端点$j$满足单调性,若$s[i]-s[j-1]-\max(区间内最大的f)\leq p$,则可行。
用单调队列维护即可,时间复杂度$O(n)$。
#include<cstdio> #define N 2000010 int n,d,i,j,q ,h,t,ans;long long p,sum,s ,f ; inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';} int main(){ read(n),scanf("%lld",&p),read(d); for(i=1;i<=n;i++)read(j),s[i]=s[i-1]+j; for(i=1;i<=n-d+1;i++)f[i]=s[i+d-1]-s[i-1]; for(i=d,j=h=1;i<=n;i++){ while(h<=t&&f[q[t]]<=f[i-d+1])t--;q[++t]=i-d+1; while(s[i]-s[j-1]-f[q[h]]>p)for(j++;q[h]<j;h++); if(i-j+1>ans)ans=i-j+1; } return printf("%d",ans),0; }
相关文章推荐
- UML类图几种关系的总结
- BZOJ4384 : [POI2015]Trzy wieże
- 快慢指针判断单向链表是否有环及找环入口
- BZOJ4383 : [POI2015]Pustynia
- 个人项目进展
- BZOJ4382 : [POI2015]Podział naszyjnika
- BZOJ4381 : [POI2015]Odwiedziny
- BZOJ4380 : [POI2015]Myjnie
- BZOJ4379 : [POI2015]Modernizacja autostrady
- 123. Best Time to Buy and Sell Stock III
- 抽象工厂模式 shiyanlou
- JAVA环境变量配置
- grep命令
- BZOJ4378 : [POI2015]Logistyka
- 深搜算法:倒油/面向对象的思想来做
- 深搜算法:倒油/面向对象的思想来做
- grep命令
- Android基础-TextView用法
- 用户和组管理类命令整理
- oracle 正则表达式