一看就好熟悉好熟悉啊!!!结果还是忘了。。。
类似这种题呢就用单调队列。例如这道题维护单调递增队列,当下一个比它高,就要新建一个楼,但要是比前一个矮且在前面出现过,那么这个楼就不用再建了。
#include<stdio.h>
int n,l;
int a[60000];
int que[60000];
int cnt;
int main()
{
scanf("%d %d",&n,&l);
for(int i=1;i<=n;i++)
{
int v;
scanf("%d %d",&v,&a[i]);
}
int ans=n;
que[0]=0;
for(int i=1;i<=n;i++)
{
while(que[cnt]>a[i]&&cnt>0)
{
cnt--;
}
if(que[cnt]!=a[i])que[++cnt]=a[i];
else ans--;
}
printf("%d",ans);
}