[COI2007] Patrik 音乐会的等待 (单调栈,模拟) 题目描述 N个人正在排队进入一个音乐会。人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人。队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。 写一个程序计算出有多少对人可以互相看见。 输入输出格式 ...
代码极其简单。。。 #include<bits/stdc++.h>#defineil inline#definerg register#defineldb double#definelst long long#definergt register int#defineN 500050usingnamespacestd;constintInf=1e9;ilintread(){ints=0,m=0;charch=getchar();while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}while...
既然是要处理区间内最高的问题,当然是用单调栈了。然后一开始手玩了一下样例感觉就是维护一下每个身高最高的范围,然后如果 ri−li≥3 就表示有一对可以看见的,结果理所当然地WA了…… 我们维护一个pair<身高, 人数>的单调减的栈,如果加进来的人身高大于等于栈顶,就一直出栈并且把答案加上人数。如果是和栈...
#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#include<stack>#include<string>usingnamespacestd;voidsetIO(string a){freopen((a+".in").c_str(),"r",stdin),freopen((a+".out").c_str(),"w",stdout);}voidshutIO(){fclose(stdin),fclose(stdout);}#definemaxn500009in...
P1823 [COI2007] Patrik 音乐会的等待 洛谷,原题链接很容易分析出边界点是身高比h[i]高的人,单调栈里是形成单调递减栈.能与h[i]形成一对的人h<=h[i],而且h[i]能看到离他最近的比他高的人,所以本题我们需要利用单调栈的边界点和while循环里pop的点,因为要避免重复,所以我
[COI2007] Patrik 音乐会的等待 单调栈Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> #include<stack> #include<string> using namespace std; void setIO(string a){ freopen((a+".in").c_str(),"r",stdin),freopen((a+".out").c_str(),"w",stdout); } ...
题目链接:https://www.luogu.org/problemnew/show/P1823 题目: N个人正在排队进入一个音乐会。人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人。 队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。 写
P1823 [COI2007] Patrik 音乐会的等待 洛谷 原题链接 很容易分析出边界点是身高比h[i]高的人,单调栈里是形成单调递减栈.能与h[i]形成一对的人h<=h[i],而且h[i]能看到离他最近的比他高的人,所以本题我们需要利用单调栈的边界点和while循环里pop的点,因为要避免重复,所以我们只需要从左边或右边开始...
洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈) 解题思路 从前往后维护一个严格单调递减栈,在弹出元素和入栈的时候更新答案。 但是要注意两人身高相等的情况,所以要记下某元素的个数。 细节还是蛮多的。 AC代码 #include<iostream> #include<cstdio>...
洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈) 传送门 解题思路 从前往后维护一个严格单调递减栈,在弹出元素和入栈的时候更新答案。 但是要注意两人身高相等的情况,所以要记下某元素的个数。 细节还是蛮多的。 AC代码 #include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm...