单调栈与单调队列简单例题
单调栈与单调队列简单例题
单调栈:
POJ3250
题意:有n只奶牛排成一列向右看,每头奶牛只能看到比自己矮的奶牛,即会被高的奶牛挡住后面,问共有多少只奶牛能被看到
思路:考虑每头奶牛能被前面牛看到的次数,也就是从他左边开始单调递减的序列的长度,用单调栈维护即可
代码:
#include<cstdio>
#include<stack>
using namespace std;
const int maxn = 80005;
stack<int > s;
int main() {int n,x;long long sum = 0;scanf("%d",&n);scanf("%d",&x);s.push(x);for(int i = 1;i < n;i++) {scanf("%d",&x);while(!s.empty() && s.top() <= x) s.pop();sum += s.size();s.push(x);}printf("%lld\n",sum);return 0;
}
单调队列:
Poj2823(这题好像要用c++交才能过)
题意:给出一个长度为n的序列和区间长度k,从左向右对每一个长度为k的区间询问最大值和最小值。
思路:对于最小值,考虑维护一个递增的双端队列,每次入队时将队尾比当前入队元素的全部删除,每次取队首并且判断是否在当前区间内即可
代码:
#include<cstdio>
#include<deque>
#include<iostream>
#include<algorithm>
#include<utility>
using namespace std;
const int maxn = 1e6+5;
deque<int> Q1,Q2;
int a[maxn];
int n,k;
void solve1() {for(int i = 1;i <= n;i++) {while(!Q1.empty() && a[Q1.back()] >= a[i]) Q1.pop_back();Q1.push_back(i);if(i>=k) {while(!Q1.empty() && Q1.front() < i-k+1) Q1.pop_front();printf("%d ",a[Q1.front()]);}}
}
void solve2() {for(int i = 1;i <= n;i++) {while(!Q2.empty() && a[Q2.back()] <= a[i]) Q2.pop_back();Q2.push_back(i);if(i>=k) {while(!Q2.empty() && Q2.front() < i-k+1) Q2.pop_front();printf("%d ",a[Q2.front()]);}}
}
int main() {scanf("%d%d",&n,&k);for(int i = 1;i <= n;i++) scanf("%d",&a[i]);solve1();printf("\n");solve2();return 0;
}
转载于:https://www.cnblogs.com/pot-a-to/p/11180802.html
单调栈与单调队列简单例题相关推荐
- 【数据结构】单调栈和单调队列 详解+例题剖析
算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...
- 刷题关键点总结-单调栈、单调队列
单调栈,单调队列顾名思义,栈内或者队列内元素具有一致下降或者一致上升的特点. 选用单调栈或者队列的出发点: 使用单调栈或者单调队列一般具有三个出发点: 1.求栈或队列内某个元素左侧或者右侧第一个比它大 ...
- 模板_单调栈_AcWing_830. 单调栈_底顶递增栈
模板_单调栈_AcWing_830. 单调栈_底顶递增栈 830. 单调栈 题目 提交记录 讨论 题解 视频讲解 给定一个长度为 NN 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 − ...
- 线性结构 —— 单调栈与单调队列
[单调栈] 1.原理 单调栈,就是栈内元素保持一定单调性(单调递增或单调递减)的栈,即从栈底到栈顶单调递增或递减. 对于单调递增的栈,如果栈为空或入栈元素值大于等于栈顶元素值,则入栈:否则,若入栈会破 ...
- 数据结构 - 单调栈、单调队列
单调栈:每日温度 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替 单调栈基本只处理NGE问题(Nex ...
- 单调栈和单调队列的应用即总结
单调栈 基本概念 单调栈的基础结构是"栈",即元素是LIFO的,只能从栈顶控制数据出入:单调表示从栈的一端到另一端遍历,元素是单调递增或者单调递减的.比如单调递减栈,从栈底到栈顶的 ...
- 单调栈是单调递增还是单调递减?
一言以蔽之,最后的需求是什么,单调栈的单调性就是什么. 如果要找第一个小于的元素,单调栈即为递增:找第一个大于的元素,单调栈即为递减.当前元素与目标元素的大小关系就是单调栈内部元素的大小关系.
- 【c++刷题Day2】专题3栈与队列单调栈与单调队列T3
这是C++刷题的Day2
- 单调队列,单调栈总结
最近几天接触了单调队列,还接触了单调栈,就总结一下. 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调,单调递增或者单调递减.当要入栈或者入队的时候,要和栈头或者队尾进行比 ...
最新文章
- apache 安装后默认主页无法打开_CAD教程:CAD软件打开图纸后钢筋符号无法读取的解决办法...
- 2016-2017 ACM-ICPC CHINA-Final(EC-final) 题解(10 / 12)
- python培训学校-西安有没有好点的Python培训学校
- 题目1022:游船出租
- 编程语言可分为三大类
- 在VMware虚拟机下安装ubuntu16.04,及hackrf one环境配置
- VB 禁止修改系统时间
- USACO crypt1
- 《移动应用开发》实验报告——仿饿了么商家页面
- 概率图模型中信念传播
- 工业交换机的性能优势有哪些?
- 【用word快速输入公式】希腊字母名称和大小写
- leetcode刷题:121题stock
- 从IT的角度思考BIM(三):敏捷开发
- oracle之完整性约束
- iOS AVPlayer支持播放的格式
- 弘辽科技:新品直通车怎么选词?怎样测试人群标签?
- 进程间通讯的四种方式
- 【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛
- 分布式子系统之间通讯
热门文章
- Linux 利用hosts.deny 防止暴力破解ssh
- android中Canvas使用drawBitmap绘制图片
- android中的资源文件
- Web后端学习笔记 Flask(8) WTForms 表单验证,文件上传
- 关于使用tensorflow object detection API训练自己的模型-补充部分(代码,数据标注工具,训练数据,测试数据)
- java中import的使用
- Python判断素数(质数)
- 嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!
- QQ空间面试题放送,速度教科书式扑街补救offer!
- Mysql : InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!