题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=1113
思路
单调栈,如果栈顶小于当前,说明栈顶必须用单独的一张盖住了,如果栈顶等于当前,说明可以用同一张盖住。
代码
#include <cstdio>
const int maxn=250000;
int read()
{
int x=0,f=1;
char ch=getchar();
while((ch<'0')||(ch>'9'))
{
if(ch=='-')
{
f=-f;
}
ch=getchar();
}
while((ch>='0')&&(ch<='9'))
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int n,ans,stack[maxn+10],head;
int main()
{
n=read();
while(n--)
{
int b=read(),a=read();
while(head&&(stack[head]>a))
{
++ans;
--head;
}
while(head&&(stack[head]==a))
{
--head;
}
stack[++head]=a;
}
printf("%d\n",ans+head);
return 0;
}