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
 
 
单调栈,在读入的时候进行压栈,如果栈顶比他高就弹出,否则压栈,最后记住要用0来把栈清空。。。
 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 }
View Code

 

posted @ 2015-10-06 09:43  HTWX  阅读(116)  评论(0编辑  收藏  举报