Description
Input
第一行给出NN,WW
第二行到第N+1N+1行:每行给出二个整数x,yx,y,输入的xx严格递增,并且第一个xx总是11
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
INPUT DETAILS:
The case mentioned above
Sample Output
6
HINT
Source
Silver
思路
单调栈维护高度,插入一个数,如果栈顶比他大那么弹出栈顶并且答案加11;如果栈顶与他相同那么弹出栈顶。
代码
#include <cstdio>
const int maxn=50000;
struct stack
{
int s[maxn+10],head;
inline int push(int x)
{
s[++head]=x;
return 0;
}
inline int pop()
{
--head;
return 0;
}
inline int top()
{
return s[head];
}
inline int size()
{
return head;
}
};
stack st;
int ans,n,w,a,b;
int main()
{
scanf("%d%d",&n,&w);
while(n--)
{
scanf("%d%d",&a,&b);
while(st.size()&&(st.top()>b))
{
st.pop();
++ans;
}
while(st.size()&&(st.top()==b))
{
st.pop();
}
if(b)
{
st.push(b);
}
}
ans+=st.size();
printf("%d\n",ans);
return 0;
}