題目連結:[COI2007] Patrik 音乐会的等待 - 洛谷

一開始看到題目有種逆序對的感覺,但題目說明中間若有比自己高的點就不算一對,這就不關逆序對的事情了。

1. 中間不能有比自己高的人

2. 相鄰兩個人可以算一對

從這個特性我們知道,假設前面有k個人,他們的升高都是降序排好的,如果有一個人進來了,他比這k個人都大,那麼如果第k + 2個人進來,我們可以保證這k + 2個人都不能和這k個人湊成一對,因為第k+1個人比前k個人要高,這就是題目給的條件1。

那這就挺適合用單調棧的了,我們保證單調棧是降序的,一旦有比棧頂高的人進來,那就說明棧內所有比這個人矮的人都能成一對,因為我們的棧是降序的。

那麼考慮一下一樣高的人進來怎麼辦?他不能只對答案貢獻1啊,因為棧內的其他人也有可能和他湊成一對,一會進來的人也能跟他湊成一對,那可以怎麼辦?

想到這裡我就可以用一個結構體,把重複的身高記一下,一會有比當前高的人進來,我們就不用擔心我們把前面的人彈出棧導致正確性不能保證了,並且整個棧都是保證絕對降序,不會有一樣的存在,而且對答案的貢獻是出現的次數。

代碼 很簡單就是普通的棧,加上結構體。

#include <iostream>
#include <vector>
using namespace std;
int n;
long long ans = 0;
struct node{int val, num;
};
vector<node> s;
int main(){cin >> n;for(int i = 1; i <= n; i++){int a;cin >> a;node m = (node){a, 1};while(!s.empty() && s.back().val <= a){ans += s.back().num;if(s.back().val == a){m.num +=s.back().num;}s.pop_back();}//reason 1if(!s.empty())ans++;s.push_back(m);}cout << ans << endl;return 0;
}

reason 1

如果棧一直被彈出,並且是空的,那麼答案無需匹配,因為最後沒有人可以跟新進來的人進行匹配,但是如果棧不是空,也就是說最後有人可以和新進來的人進行匹配,答案就要加1,不然會少算一對。

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 音乐会的等待

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

  5. 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] 交谈, ...

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

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

  7. P1823 [COI2007] Patrik 音乐会的等待 单调栈

    单调栈 链接 栈底维护的是目前身高最高的人,因为在此人前的人因为此人的存在不能与后来的人联系了,所以如果遇到身高高的人就不断让比他身高矮的人出栈即可.不过我们还要留意身高相同的情况. 由于要考虑重复的 ...

  8. 任天堂新音樂遊戲上市

    在這個假期﹐一些美國家庭將不再像以往那樣圍在鋼琴旁唱歌﹐而是會擺上他們的電視機和遊戲機﹐通過<吉他英雄>(Guitar Hero)和<搖滾樂隊>(Rock Band)這樣的遊戲 ...

  9. 心靜如水的時候聽音樂

    喜歡音樂,悠揚的,急促的,歡快的,憂傷的,古典的,流行的······ 從孩童時起,就喜歡將身心浸泡在樂聲中,如同一朵朵白菊花在開水裏浸潤著,慢慢地舒展開來,悠閒地浮沉著,氤氳著.喜悅輕輕地籠上心頭. ...

最新文章

  1. jquery 取对象数组下标_JQuery使用index方法获取Jquery对象数组下标的方法
  2. tos win10打开ip_win 10 系统 Docker 的安装和使用
  3. phpStorm中的unescaped xml character问题
  4. Error: Program type already present: okhttp3.Authenticator$1
  5. 【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java、DFS、字符串)
  6. react字符串转html函数,react 字符串强转为html标签
  7. qt 如何 指针 自动 释放内存_要是面试官再问你智能指针的问题,就拿这篇文章“盘他”!!!...
  8. matlab2c使用c++实现matlab函数系列教程-raylpdf函数
  9. onenote 不能同步的原因及解决方法(教训总结)
  10. python — Auto_QQ连连看
  11. chrome浏览器使用console代码让115网盘免扫二维码登陆
  12. 吃握手包的电子宠物 - Pwnagotchi开箱教程
  13. 如何创建Roadmap产品路线图
  14. 工匠精神消失的手机2020:衰落、变局、绝唱、破圈
  15. 关于在多重积分以及曲线曲面积分中对称性的应用
  16. Charles的安装和注册码破解
  17. win10软件安装出现错误代码2503/2502,解决方案
  18. Matlab:向饼图添加图例
  19. PDF如何编辑,怎么编辑PDF文件中的文字
  20. PMBOK指南第六版与第五版的区别在哪里?

热门文章

  1. k线形态python_如何用Python量化“相似K线”实现形态选股?
  2. 计算机绪论知识点,第一章 绪论
  3. P14-前端基础-CSS属性选择器
  4. python正则 两边固定 中间任意字符
  5. 2014华为武汉上机试题一:手机电池余量
  6. 19.Java复习(二)
  7. 大型交易系统之高并发
  8. Android App使用Edge大声朗读功能
  9. mysql将时间戳转换成日期_mysql 中查询时如何将时间戳转换为日期格式 / 日期格式转换为时间戳...
  10. Java中的isnan函数_Java Float类isNaN()方法与示例