CF821C 【Okabe and Boxes】题解--zhengjun
一道模拟题
每一次 add 的时候,就不用管直接扔进栈里面,因为你在这个时候排个序不如之后 remove 的时候排序。
然后每一次 remove 的时候。
如果栈顶是当前要出栈的数,那么直接让他出去。
否则,就需要排一次序,把答案加一。
因为这样已经拍过序了,所以之后的已经不用排了,那么就直接把这些数全部出栈,后面如果要出栈时,栈为空,那么这个要出栈的书一定是在之前就出去了。
#include<cstdio>
using namespace std;
int n,x,s[300001],top,ans;
char c[10];
int main(){
scanf("%d",&n);
for(int i=1,k=0;i<=(n<<1);i++){
scanf("%s",c+1);
if(c[1]=='a'){
scanf("%d",&x);
s[++top]=x;
}
else{
k++;
if(!top)continue;
if(s[top]!=k){
top=0;
ans++;
}
else top--;
}
}
printf("%d",ans);
return 0;
}