单调栈与单调队列简单例题

单调栈:

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. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

  2. 刷题关键点总结-单调栈、单调队列

    单调栈,单调队列顾名思义,栈内或者队列内元素具有一致下降或者一致上升的特点. 选用单调栈或者队列的出发点: 使用单调栈或者单调队列一般具有三个出发点: 1.求栈或队列内某个元素左侧或者右侧第一个比它大 ...

  3. 模板_单调栈_AcWing_830. 单调栈_底顶递增栈

    模板_单调栈_AcWing_830. 单调栈_底顶递增栈 830. 单调栈 题目 提交记录 讨论 题解 视频讲解 给定一个长度为 NN 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 − ...

  4. 线性结构 —— 单调栈与单调队列

    [单调栈] 1.原理 单调栈,就是栈内元素保持一定单调性(单调递增或单调递减)的栈,即从栈底到栈顶单调递增或递减. 对于单调递增的栈,如果栈为空或入栈元素值大于等于栈顶元素值,则入栈:否则,若入栈会破 ...

  5. 数据结构 - 单调栈、单调队列

    单调栈:每日温度 请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度.如果气温在这之后都不会升高,请在该位置用 0 来代替 单调栈基本只处理NGE问题(Nex ...

  6. 单调栈和单调队列的应用即总结

    单调栈 基本概念 单调栈的基础结构是"栈",即元素是LIFO的,只能从栈顶控制数据出入:单调表示从栈的一端到另一端遍历,元素是单调递增或者单调递减的.比如单调递减栈,从栈底到栈顶的 ...

  7. 单调栈是单调递增还是单调递减?

    一言以蔽之,最后的需求是什么,单调栈的单调性就是什么. 如果要找第一个小于的元素,单调栈即为递增:找第一个大于的元素,单调栈即为递减.当前元素与目标元素的大小关系就是单调栈内部元素的大小关系.

  8. 【c++刷题Day2】专题3栈与队列单调栈与单调队列T3

    这是C++刷题的Day2

  9. 单调队列,单调栈总结

    最近几天接触了单调队列,还接触了单调栈,就总结一下. 其实单调队列,和单调栈都是差不多的数据类型,顾名思义就是在栈和队列上加上单调,单调递增或者单调递减.当要入栈或者入队的时候,要和栈头或者队尾进行比 ...

最新文章

  1. apache 安装后默认主页无法打开_CAD教程:CAD软件打开图纸后钢筋符号无法读取的解决办法...
  2. 2016-2017 ACM-ICPC CHINA-Final(EC-final) 题解(10 / 12)
  3. python培训学校-西安有没有好点的Python培训学校
  4. 题目1022:游船出租
  5. 编程语言可分为三大类
  6. 在VMware虚拟机下安装ubuntu16.04,及hackrf one环境配置
  7. VB 禁止修改系统时间
  8. USACO crypt1
  9. 《移动应用开发》实验报告——仿饿了么商家页面
  10. 概率图模型中信念传播
  11. 工业交换机的性能优势有哪些?
  12. 【用word快速输入公式】希腊字母名称和大小写
  13. leetcode刷题:121题stock
  14. 从IT的角度思考BIM(三):敏捷开发
  15. oracle之完整性约束
  16. iOS AVPlayer支持播放的格式
  17. 弘辽科技:新品直通车怎么选词?怎样测试人群标签?
  18. 进程间通讯的四种方式
  19. 【LCA】BZOJ1776-[Usaco2010 Hol]cowpol 奶牛政坛
  20. 分布式子系统之间通讯

热门文章

  1. Linux 利用hosts.deny 防止暴力破解ssh
  2. android中Canvas使用drawBitmap绘制图片
  3. android中的资源文件
  4. Web后端学习笔记 Flask(8) WTForms 表单验证,文件上传
  5. 关于使用tensorflow object detection API训练自己的模型-补充部分(代码,数据标注工具,训练数据,测试数据)
  6. java中import的使用
  7. Python判断素数(质数)
  8. 嘘,我已经瞒着开发解锁APP日志文件抓取及分析啦!
  9. QQ空间面试题放送,速度教科书式扑街补救offer!
  10. Mysql : InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!