博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ4385 : [POI2015]Wilcze doły
阅读量:7072 次
发布时间:2019-06-28

本文共 670 字,大约阅读时间需要 2 分钟。

求出前缀和$s$,设$f[i]=s[i+d-1]-s[i-1]$。

从左到右枚举的右端点$i$,左端点$j$满足单调性,若$s[i]-s[j-1]-\max(区间内最大的f)\leq p$,则可行。

用单调队列维护即可,时间复杂度$O(n)$。

 

#include
#define N 2000010int n,d,i,j,q[N],h,t,ans;long long p,sum,s[N],f[N];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]
ans)ans=i-j+1; } return printf("%d",ans),0;}

  

转载地址:http://lskml.baihongyu.com/

你可能感兴趣的文章
[翻译] UPCardsCarousel
查看>>
win8 开发之旅(19) --足球游戏揭秘6
查看>>
翻页效果
查看>>
UIGestureRecognizerState
查看>>
Lua非常有用的工具——递归打印表数据
查看>>
(九十四)函数和二维数组
查看>>
Android ListView监听上下滑动(判断是否显示返回顶部按钮)
查看>>
跟着实例学习ZooKeeper的用法: Barrier
查看>>
JAVA生成二维码(zxing)
查看>>
BUG系列
查看>>
成为优秀Java程序员的10大技巧
查看>>
一个16年毕业生所经历的php面试
查看>>
AAC架构系列一(初识)
查看>>
react-native-echarts 在手机上 图表出现滚动条解决方法
查看>>
前端小白入门区块链系列01
查看>>
HyperLedger Fabric(超级账本) 入门实战
查看>>
Android自定义Toast
查看>>
JavaScript 函数式编程技巧 - 反柯里化
查看>>
一个简单高性能的Go router,和httprouter 差不多快,且支持正则
查看>>
网络数据抓取
查看>>