P1823 [COI2007] Patrik 音樂會的等待
題目連結:[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 音樂會的等待相关推荐
- Luogu P1823 [COI2007] Patrik 音乐会的等待
Luogu P1823 [COI2007] Patrik 音乐会的等待 做一套初赛模拟题,填程序是这个 就顺便找原题做一下 :单调栈 #include<cstdio> #include&l ...
- P1823 [COI2007] Patrik 音乐会的等待
P1823 [COI2007] Patrik 音乐会的等待 模型总结 单调栈 关键点 开longlong 注意对相同元素的处理,注意最劣复杂度要正确 使用二分进行统计和出栈 // from [hzwe ...
- 【题解】洛谷P1823 [COI2007]Patrik音乐会的等待
前往:我自己搭建的博客 题目 洛谷P1823[COI2007]Patrik音乐会的等待 题解 使用单调栈维护一个不严格递减的数列,将新的元素与栈顶元素依次比较,如果符合要求(能互相看到)就计数,同时维 ...
- 洛谷 P1823 [COI2007] Patrik 音乐会的等待
目录: 题目: 分析: 80分: 100分(AC): 代码: 80分: 100分(AC) 题目: 传送门 分析: 80分: 按照普通的单调栈的做法,每加入一个人,就开始操作:当当前栈顶小于这个人的身高 ...
- 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] 交谈, ...
- 洛谷P1823 [COI2007] Patrik 音乐会的等待
1 #include<cstdio> 2 #include<algorithm> 3 #include<stack> 4 #include<cctype> ...
- P1823 [COI2007] Patrik 音乐会的等待 单调栈
单调栈 链接 栈底维护的是目前身高最高的人,因为在此人前的人因为此人的存在不能与后来的人联系了,所以如果遇到身高高的人就不断让比他身高矮的人出栈即可.不过我们还要留意身高相同的情况. 由于要考虑重复的 ...
- 任天堂新音樂遊戲上市
在這個假期﹐一些美國家庭將不再像以往那樣圍在鋼琴旁唱歌﹐而是會擺上他們的電視機和遊戲機﹐通過<吉他英雄>(Guitar Hero)和<搖滾樂隊>(Rock Band)這樣的遊戲 ...
- 心靜如水的時候聽音樂
喜歡音樂,悠揚的,急促的,歡快的,憂傷的,古典的,流行的······ 從孩童時起,就喜歡將身心浸泡在樂聲中,如同一朵朵白菊花在開水裏浸潤著,慢慢地舒展開來,悠閒地浮沉著,氤氳著.喜悅輕輕地籠上心頭. ...
最新文章
- jquery 取对象数组下标_JQuery使用index方法获取Jquery对象数组下标的方法
- tos win10打开ip_win 10 系统 Docker 的安装和使用
- phpStorm中的unescaped xml character问题
- Error: Program type already present: okhttp3.Authenticator$1
- 【LeetCode笔记】剑指 Offer 93. 复原 IP 地址(Java、DFS、字符串)
- react字符串转html函数,react 字符串强转为html标签
- qt 如何 指针 自动 释放内存_要是面试官再问你智能指针的问题,就拿这篇文章“盘他”!!!...
- matlab2c使用c++实现matlab函数系列教程-raylpdf函数
- onenote 不能同步的原因及解决方法(教训总结)
- python — Auto_QQ连连看
- chrome浏览器使用console代码让115网盘免扫二维码登陆
- 吃握手包的电子宠物 - Pwnagotchi开箱教程
- 如何创建Roadmap产品路线图
- 工匠精神消失的手机2020:衰落、变局、绝唱、破圈
- 关于在多重积分以及曲线曲面积分中对称性的应用
- Charles的安装和注册码破解
- win10软件安装出现错误代码2503/2502,解决方案
- Matlab:向饼图添加图例
- PDF如何编辑,怎么编辑PDF文件中的文字
- PMBOK指南第六版与第五版的区别在哪里?
热门文章
- k线形态python_如何用Python量化“相似K线”实现形态选股?
- 计算机绪论知识点,第一章 绪论
- P14-前端基础-CSS属性选择器
- python正则 两边固定 中间任意字符
- 2014华为武汉上机试题一:手机电池余量
- 19.Java复习(二)
- 大型交易系统之高并发
- Android App使用Edge大声朗读功能
- mysql将时间戳转换成日期_mysql 中查询时如何将时间戳转换为日期格式 / 日期格式转换为时间戳...
- Java中的isnan函数_Java Float类isNaN()方法与示例