1628: [Usaco2007 Demo]City skyline
Description
Input
第一行给出N,W
第二行到第N+1行:每行给出二个整数x,y,输入的x严格递增,并且第一个x总是1
Output
输出一个整数,表示城市中最少包含的建筑物数量
Sample Input
10 26
1 1
2 2
5 1
6 3
8 1
11 0
15 2
17 3
20 2
22 1
1 1
2 2
5 1
6 3
8 1
11 0
15 2
17 3
20 2
22 1
单调栈,在读入的时候进行压栈,如果栈顶比他高就弹出,否则压栈,最后记住要用0来把栈清空。。。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<vector> 7 #include<map> 8 #include<set> 9 #include<queue> 10 #define maxn 1000010 11 #define ll long long 12 #define inf 600000000 13 using namespace std; 14 int sta[maxn],top=0,ans; 15 int main(){ 16 int n,m; 17 scanf("%d%d",&n,&m); 18 ans=0; 19 for(int i=1,x,y;i<=n;i++){ 20 scanf("%d%d",&x,&y); 21 while(sta[top]>y){top--;ans++;} 22 if(sta[top]<y)sta[++top]=y; 23 } 24 while(sta[top]>0){top--;ans++;} 25 printf("%d",ans); 26 }