题意:

给长度为n的数列,找到每个数右边距离他最远的比他小数,输出他们之间有多少个数,如果右边没有比他小的,输出-1.

分析:

因为要找从右边开始第一个比他小的数
因此从右边向左遍历,同时维护一个递减序列
如果当前元素比序列最小值还小,则没有比他小的,输出-1
否则从序列中二分找出最右边比他小的数,然后计算答案

因为要用到整个序列,所以不能用stl必须用数组实现

code:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxm=1e5+5;
int stk[maxm],head;//栈
int ans[maxm];
int a[maxm];
int n;
int ask(int x){//找出比x小的最大下标int l=1,r=head;int res=0;while(l<=r){int mid=(l+r)/2;if(a[stk[mid]]<a[x]){res=mid;r=mid-1;}else{l=mid+1;}}return stk[res];
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=n;i>=1;i--){//栈顶最小值if(head==0||a[i]<=a[stk[head]]){//如果栈为空或者小于等于栈顶,说明没有更小的ans[i]=-1;stk[++head]=i;//入栈}else{ans[i]=ask(i)-i-1;}}for(int i=1;i<=n;i++){cout<<ans[i]<<' ';}return 0;
}

CodeForces - 91 B.Queue (单调栈)相关推荐

  1. 单调队列 Monotonic Queue / 单调栈 Monotonic Stack

    2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...

  2. CodeForces - 817D Imbalanced Array(单调栈)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求出所有子区间的最大值与最小值之差的和 题目分析:不难看出最大值和最小值之差的和可以拆开,拆成最大值之和与最小值之和之差,现在问题转换为如 ...

  3. [cf] Codeforces 817D Imbalanced Array 单调栈

    前言 传送门 : 优质题解传送门 : wls题目传送门 : 思路 使用单调栈维护当前节点 是最大值的时候的区间 以及当前节点是最小值时候的区间 然后统计计数即可 而求区间最大最小值可以使用单调栈处理 ...

  4. Codeforces 1300E. Water Balance[单调栈]

    题目链接 题目大意:给你一个长度为n的数组,你可以选择一段区间将这段区间的数全都变成这段区间的平均值,问你最后这个数组字典序最小是怎么样的 解题思路:1.首先我们知道最后这个序列一定会变成一个单调上升 ...

  5. CodeForces - 1484E Skyline Photo(dp+单调栈)

    题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...

  6. CodeForces - 1506G Maximize the Remaining String(单调栈+贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,假设共出现了 kkk 种字母,现在要求出一个长度为 kkk 的子序列,满足每种字母只出现一次,且字典序最大 题目分析:和之前牛客上的一道 ...

  7. 【Codeforces 549F】Yura and Developers | 单调栈、启发式合并、二分

    题目链接:https://codeforces.com/problemset/problem/549/F 题目大意: 给定一个序列和一个mod值,定义[l,r]合法当l到r的所有元素和减去其中的最大值 ...

  8. CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)

    题目链接:点击查看 题目大意:给出 n 个大楼的高度记为 h,现在需要从第一个大楼到达第 n 个大楼,问最小步数是多少,只有满足以下条件时才能从 i 移动到 j ,设 i < j: 题目分析:无 ...

  9. CodeForces - 1313C2 Skyscrapers (hard version)(单调栈+dp/分治)

    题目链接:点击查看 题目大意:给出 n 块连续的空地可以建造摩天大楼,政府有规定,每块地最高只能建 a[ i ] 的高度,同时每栋大楼需要满足一个规则,即每栋大楼的两侧不允许同时存在比自己高的大楼,输 ...

最新文章

  1. zk如何实现watch
  2. 依图超车争夺AI创业第一股!冲刺科创板,募资75亿为造芯,去年营收91%投向研发...
  3. angr学习笔记(10)(hook)
  4. Android存储路径你了解多少?
  5. Easy Slider: 功能强大简单易用的jQuery滑动门插件
  6. Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
  7. linux yun nginx,Linux - CentOS 7 通过Yum源安装 Nginx
  8. Java学习:抽象类与接口
  9. CSS样式:2、超出隐藏控制
  10. linux ext4,ext3的特点和区别
  11. 招生技巧----如何预约学生和家长 (一)
  12. 分布式-图片上传到Lgnix
  13. matlab迭代算法实例_智能优化算法及其MATLAB实例-免疫算法笔记
  14. java讲师北京_Java工程师提升空间大,前途好,该如何跨入它的大门呢?
  15. ASP.NET 缓存(10)
  16. c#明华rf读卡器_深圳明华URF-R330读卡器 M1卡读写程序(C#版)
  17. 【线上直播ING】2016互联网金融应用发展半年报
  18. 文档在线打印,保持样式不变解决方法
  19. 管理模型 - RACI模型
  20. MaC 修改MySQL密码

热门文章

  1. 地质灾害监测系统 地质灾害监测解决方案
  2. ubuntu server + openbox
  3. 黑峡谷 X3 Pro、X5 Pro 评测
  4. C51的memset
  5. Xmind基础教程-下钻和上钻
  6. 最新分享美团面试总结:1000+超全面试题
  7. CSS中设置行间距的方法
  8. 房产测量程序lisp_AutoLISP语言在房产测绘中的应用
  9. ZBrush快捷键与鼠标操作大全
  10. 记录下较为完整的Rabbitmq学习笔记