vijos1091(单调队列)
来源:互联网 发布:cf有刷枪软件吗 编辑:程序博客网 时间:2024/04/30 22:58
对于环我们可以把它复制粘在后面。
然后我们对于每一个加油站,设置一个a[]表示在这一个加油站加的油减去从这个加油站开到另一个加油站的差。
那么我们要想选定某个加油站i作为起点,问题就变成了从i到i+n能够中间不断油,不断油的表现就是对于路径上的任何一个
加油站k,有a[i]+a[i+1]...+a[k]>0,我们维护一个前缀和s[i]=a[1]+a[2]+a[3]+...a[i],那么a[i]+a[i+1]+..+a[k]=
s[k]-s[i-1],我们枚举加油点i作为起点,那么我们的问题就是检验i<k<=i+n,都有s[k]-s[i-1]>0,这个问题只要我们检验s[k]中的最小值就可以解决了。那么s[k]的最小值可以用什么迅速求呢?单调队列!它的均摊复杂度就是O(1)的...然后
我们直接枚举1~n-1的每一个加油站作为起点,然后从它的区间里面用单调队列找出最小值,判断它们的差是否大于0即可。
#include<cstdio>#include<algorithm>using namespace std;const int maxn=10000009;int s[maxn],d[1000009],ss[1000009],q[1000009],n,l,a[1000009],dd[maxn],head=1,tail=1;int b[maxn]={false};void in(int i){while (q[tail]>=ss[i]) tail--;q[++tail]=ss[i];dd[tail]=i;}void out(int i){if (dd[head]<=i) head++;q[head-1]=-0x3f3f3f3f;}int main(){scanf("%d%d",&n,&l);int k=0;for (int i=1;i<=n;i++){int x,y;scanf("%d%d",&x,&y);k+=x;if (i>1) d[i-1]=d[i-1+n]=x;s[i]=s[i+n]=y;}q[0]=-0x3f3f3f3f;k=l-k;d[n]=k;for (int i=1;i<=n;i++) a[i]=a[i+n]=s[i]-d[i];for (int i=1;i<n*2;i++) ss[i]+=ss[i-1]+a[i];for (int i=1;i<=n;i++) in(i);if (q[head]>=0) b[1]=true;for (int i=2;i<=n;i++) {out(i-1);in(i+n-1);if (q[head]-ss[i-1]>=0) b[i]=true;}int ans=0;for (int i=1;i<=n;i++) if (b[i]) printf("%d ",i),ans=1;if (ans==0) printf("-1"); return 0;}
0 0
- vijos1091(单调队列)
- poj2823(单调队列队列)
- 单调队列 (POJ2823)
- poj2823(单调队列)
- poj2823(单调队列)
- ssoj1589Pilots(单调队列)
- 窗口(单调队列)
- 琪露诺(单调队列)
- HDU3530(单调队列)
- hdu3530(单调队列)
- CF487B Strip(单调队列预处理+单调队列优化dp)
- poj 2823 (单调队列)
- hdu3530单调队列(双)
- CF keks(单调队列)
- HDOJ-3415(单调队列)
- 志愿者选拔(单调队列)
- poj 2823(单调队列)
- hdu 4193(单调队列)
- 5.1.定时器及其寄存器
- Linux vi编辑器方向键及退格键失效问题
- 83. Remove Duplicates from Sorted List leetcode算法笔记
- iOS dealloc 不执行或延迟执行的问题
- mysql 导入导出数据库以及函数、存储过程 【转】
- vijos1091(单调队列)
- 单调队列1001 HDU 3706 Second My Problem First 单调队列入门题
- javascript深入理解js闭包
- Ubuntu使用git clone时,网速很慢,解决方法
- Linux内核分析:中断和异常(1)
- GBDT(MART) 迭代决策树入门教程 | 简介
- dwr之session过期
- Android Studio启动虚拟机的时候出现问题Instant Run Requires‘Tools | Android | Enable ADB integration’...
- 单调队列1002 HDU 4122 Alice's mooncake shop 对于学习单调队列的同学不建议做,浪费时间的模拟水题