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;
}
posted @ 2022-06-11 14:57  A_zjzj  阅读(20)  评论(0编辑  收藏  举报