CodeForces92D-Queue(单调队列)
来源:互联网 发布:java代码大全下载 编辑:程序博客网 时间:2024/06/18 16:19
题意:
给一个序列,对于第i个数字a[i],在右边找到一个比它小的数,并且最靠右的位置k,输出k-i-1,如果一个都找不到,输出-1。对于序列的每个元素都要输出。
思路:
从最后一个数开始处理,若该数比队列中最后一个都小,则是-1,并加入队尾,否则就对队列中的数进行二分
PS:想到单调队列中的数组下标具有单调性,然后可以进行二分是解题的关键。
#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;int a[maxn], ans[maxn], q[maxn], x[maxn];int main(){ int n; while(scanf("%d", &n) != EOF) { for(int i = 1; i <= n; i++) scanf("%d", &a[i]); int cnt = 0; for(int i = n; i >= 1; i--) { if(a[i] <= x[cnt-1] || cnt == 0) { x[cnt] = a[i]; q[cnt++] = i; ans[i] = -1; } else { int left = 0, right = cnt - 1, mid, pos; while(left <= right) { mid = (left + right) >> 1; if(x[mid] < a[i]) { pos = mid; right = mid - 1; } else left = mid + 1; } ans[i] = q[pos] - i - 1; } } for(int i = 1; i <= n; i++) printf("%d%c", ans[i], i == n ? '\n' : ' '); } return 0;}
阅读全文
0 0
- CodeForces92D-Queue(单调队列)
- 单调队列Monotonic Queue
- monotone queue(单调队列)
- 单调队列 CodeForces 91B Queue
- FZU 1894 志愿者选拔【单调队列】【monotone decreasing queue】
- 单调栈 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 简单说 CSS的vertical-align (一)
- toString方法
- C++中remove()函数总结
- 欢迎使用CSDN-markdown编辑器
- jvm系列(五):tomcat性能调优和性能监控(visualvm)
- CodeForces92D-Queue(单调队列)
- HTC Vive VR房产项目开发三(添加物体提示)
- UCML设定双击事件页面初始化自动执行函数
- jdbc+executeQuery实现数据库查询
- Hibernate(三):Hibernate核心类,接口
- jvm系列(六):jvm调优-从eclipse开始
- HDU 1969 Pie(二分+模拟)
- Spring 如何通过 Java 代码装配 bean?
- 【数据结构之再相识】