CodeForces - 91 B.Queue (单调栈)
题意:
给长度为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 (单调栈)相关推荐
- 单调队列 Monotonic Queue / 单调栈 Monotonic Stack
2018-11-16 22:45:48 一.单调队列 Monotone Queue 239. Sliding Window Maximum 问题描述: 问题求解: 本题是一个经典的可以使用双端队列或者 ...
- CodeForces - 817D Imbalanced Array(单调栈)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求出所有子区间的最大值与最小值之差的和 题目分析:不难看出最大值和最小值之差的和可以拆开,拆成最大值之和与最小值之和之差,现在问题转换为如 ...
- [cf] Codeforces 817D Imbalanced Array 单调栈
前言 传送门 : 优质题解传送门 : wls题目传送门 : 思路 使用单调栈维护当前节点 是最大值的时候的区间 以及当前节点是最小值时候的区间 然后统计计数即可 而求区间最大最小值可以使用单调栈处理 ...
- Codeforces 1300E. Water Balance[单调栈]
题目链接 题目大意:给你一个长度为n的数组,你可以选择一段区间将这段区间的数全都变成这段区间的平均值,问你最后这个数组字典序最小是怎么样的 解题思路:1.首先我们知道最后这个序列一定会变成一个单调上升 ...
- CodeForces - 1484E Skyline Photo(dp+单调栈)
题目链接:点击查看 题目大意:给出 nnn 个建筑,每个建筑有一个高度和一个美丽值,现在要求划分为数个连续的区间,使得所有区间的贡献之和最大,其中每个区间的贡献值为,区间中高度最低的建筑物的美丽值 题 ...
- CodeForces - 1506G Maximize the Remaining String(单调栈+贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,假设共出现了 kkk 种字母,现在要求出一个长度为 kkk 的子序列,满足每种字母只出现一次,且字典序最大 题目分析:和之前牛客上的一道 ...
- 【Codeforces 549F】Yura and Developers | 单调栈、启发式合并、二分
题目链接:https://codeforces.com/problemset/problem/549/F 题目大意: 给定一个序列和一个mod值,定义[l,r]合法当l到r的所有元素和减去其中的最大值 ...
- CodeForces - 1407D Discrete Centrifugal Jumps(单调栈+dp)
题目链接:点击查看 题目大意:给出 n 个大楼的高度记为 h,现在需要从第一个大楼到达第 n 个大楼,问最小步数是多少,只有满足以下条件时才能从 i 移动到 j ,设 i < j: 题目分析:无 ...
- CodeForces - 1313C2 Skyscrapers (hard version)(单调栈+dp/分治)
题目链接:点击查看 题目大意:给出 n 块连续的空地可以建造摩天大楼,政府有规定,每块地最高只能建 a[ i ] 的高度,同时每栋大楼需要满足一个规则,即每栋大楼的两侧不允许同时存在比自己高的大楼,输 ...
最新文章
- zk如何实现watch
- 依图超车争夺AI创业第一股!冲刺科创板,募资75亿为造芯,去年营收91%投向研发...
- angr学习笔记(10)(hook)
- Android存储路径你了解多少?
- Easy Slider: 功能强大简单易用的jQuery滑动门插件
- Python【算法中心 01】Web框架Django入门(安装+项目创建+应用创建+服务启动)Python搭建算法中心后台实例分享
- linux yun nginx,Linux - CentOS 7 通过Yum源安装 Nginx
- Java学习:抽象类与接口
- CSS样式:2、超出隐藏控制
- linux ext4,ext3的特点和区别
- 招生技巧----如何预约学生和家长 (一)
- 分布式-图片上传到Lgnix
- matlab迭代算法实例_智能优化算法及其MATLAB实例-免疫算法笔记
- java讲师北京_Java工程师提升空间大,前途好,该如何跨入它的大门呢?
- ASP.NET 缓存(10)
- c#明华rf读卡器_深圳明华URF-R330读卡器 M1卡读写程序(C#版)
- 【线上直播ING】2016互联网金融应用发展半年报
- 文档在线打印,保持样式不变解决方法
- 管理模型 - RACI模型
- MaC 修改MySQL密码