单调栈

链接

栈底维护的是目前身高最高的人,因为在此人前的人因为此人的存在不能与后来的人联系了,所以如果遇到身高高的人就不断让比他身高矮的人出栈即可。不过我们还要留意身高相同的情况。
由于要考虑重复的情况,用单调队列时将高度相同的人挤掉(统计答案)之后还要再加上去,这种情况遇到所有人身高相同的时候就退化成了O(n^2)的算法了,T了三个点。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <vector>
#include <iostream>
#include <map>using namespace std;
inline int read(){int x = 0, op = 1; char ch = getchar();while (!isdigit(ch)){if (ch == '-') op = -1; ch = getchar();}while (isdigit(ch)){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}return x * op;
}
inline void write(int x){if (x < 0) putchar('-'), x = - x;if (x > 9) write(x / 10);putchar('0' + x % 10);
}const int N = 5e5 + 100;int a[N], st[N];
int main() {#ifdef DEBUGfreopen("in.txt", "r", stdin);
#endifint n = read();for (int i = 1; i <= n; ++i) {a[i] = read();}int s = 0;long long res = 0;for (int i = 1; i <= n; ++i) {int tot = 0;while (s && st[s] <= a[i]) {if (st[s] == a[i]) tot++;s--;res++;}if (s) ++res;for (int j = 0; j <= tot; ++j) {st[++s] = a[i];}}cout << res << endl;
}

于是考虑用pair,pair记录的是高度和重复的次数,因为对我们有用的信息实际上是的是元素的个数,这样就避免了再后来不断向栈里加新的元素,直接堆个数进行操作从而维护相同元素的个数。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <vector>
#include <iostream>
#include <map>
#include <stack>using namespace std;
inline int read(){int x = 0, op = 1; char ch = getchar();while (!isdigit(ch)){if (ch == '-') op = -1; ch = getchar();}while (isdigit(ch)){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}return x * op;
}
inline void write(int x){if (x < 0) putchar('-'), x = - x;if (x > 9) write(x / 10);putchar('0' + x % 10);
}using P = pair<int, int>;
stack<P> st;int main() {#ifdef DEBUGfreopen("in.txt", "r", stdin);
#endifint n = read();long long res = 0;for (int i = 1, x; i <= n; ++i) {x = read();P p = make_pair(x, 1);while (st.size() && x >= st.top().first){if (st.top().first == x) p.second += st.top().second;res += st.top().second;st.pop();}if (st.size()) res++;st.push(p);}cout << res << endl;
}

P1823 [COI2007] Patrik 音乐会的等待 单调栈相关推荐

  1. Luogu P1823 [COI2007] Patrik 音乐会的等待

    Luogu P1823 [COI2007] Patrik 音乐会的等待 做一套初赛模拟题,填程序是这个 就顺便找原题做一下 :单调栈 #include<cstdio> #include&l ...

  2. P1823 [COI2007] Patrik 音乐会的等待

    P1823 [COI2007] Patrik 音乐会的等待 模型总结 单调栈 关键点 开longlong 注意对相同元素的处理,注意最劣复杂度要正确 使用二分进行统计和出栈 // from [hzwe ...

  3. 【题解】洛谷P1823 [COI2007]Patrik音乐会的等待

    前往:我自己搭建的博客 题目 洛谷P1823[COI2007]Patrik音乐会的等待 题解 使用单调栈维护一个不严格递减的数列,将新的元素与栈顶元素依次比较,如果符合要求(能互相看到)就计数,同时维 ...

  4. P1823 [COI2007] Patrik 音乐会的等待(单调栈)

    维护一个单调栈,使得栈顶元素最小,比如:a[1]=6,a[2]=5,a[3]=2,a[4]=6 此时 a[1],a[2],a[3] 逐步进栈,有两对可以交谈 a[4] 进栈时,可以与 a[1] 交谈, ...

  5. 洛谷 P1823 [COI2007] Patrik 音乐会的等待

    目录: 题目: 分析: 80分: 100分(AC): 代码: 80分: 100分(AC) 题目: 传送门 分析: 80分: 按照普通的单调栈的做法,每加入一个人,就开始操作:当当前栈顶小于这个人的身高 ...

  6. 洛谷P1823 [COI2007] Patrik 音乐会的等待

    1 #include<cstdio> 2 #include<algorithm> 3 #include<stack> 4 #include<cctype> ...

  7. 音乐会的等待-单调栈

    关于本题,这里只是基础的写法,完美的避开了特殊情况,另一篇博文会详细讲解特殊情况 [COI2007] Patrik 音乐会的等待 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转 ...

  8. P1823 [COI2007] Patrik 音樂會的等待

    題目連結:[COI2007] Patrik 音乐会的等待 - 洛谷 一開始看到題目有種逆序對的感覺,但題目說明中間若有比自己高的點就不算一對,這就不關逆序對的事情了. 1. 中間不能有比自己高的人 2 ...

  9. ACM入门之【单调栈】

    何为单调栈,顾名思义,单调栈即满足单调性的栈结构. 单调栈解决的问题: 可以找到对于当前位置左边(或右边)最近的大于(或小于)它的值(或者下标). 常用模板: typedef long long in ...

最新文章

  1. MATLAB 的条件分支语句
  2. 1个ieee1394端口_如何使用圆形端口进行波导激励和终止
  3. SSM Automation 更新AMI镜像
  4. codeforce 1070 H
  5. Servlet中获取请求体的数据
  6. 天池入门赛--蒸汽预测
  7. udp接受_UDP协议-看这篇就够了
  8. [Unity][FlowCanvas] FlowScript 通过 Tween 实现在两点间移动
  9. 使用 JavaScript,也能在 Web 应用中实现人脸检测功能?!
  10. Fragment问题集
  11. python 实现C atoi函数
  12. 电商十三、pinyougou02.sql的内容④
  13. 系统的x86与x64是什么意思以及他们的区别?
  14. 信息技术领域会议(技术领域和非技术领域)
  15. Arduino servo库函数说明(舵机函数库)
  16. 星秒入选毕马威(KPMG)汽车科技新锐企业榜
  17. 万兆单模模块_华为万兆单模模块 OEM光模块 全面兼容OSX010000
  18. 在Centos/Linux系统下使用Phalcon开发PHP项目
  19. AppStore的渠道推⼴数据统计问题
  20. Start Developing Mac Apps -- 开始开发Mac应用

热门文章

  1. 目前用到的原型设计工具总结
  2. python编写递归函数、求斐波那契数列第n项的值_用递归函数求斐波那契数列的第n项的值...
  3. 支付宝小程序唤起签约并支付(周期扣款)
  4. 排列组合公式 与24点编程游戏
  5. 看完这一篇后我同事说我写代码像写诗
  6. win10计算机桌面快捷方式,Win10程序快捷方式添加到桌面上的两种方法
  7. 龙应台:历史对於价值判断的影响—沙漠玫瑰的故事
  8. 从零开始运营微信公众号
  9. 【第54篇】一种用于视觉识别的快速知识蒸馏框架
  10. pycharm安装Translation翻译插件