关于卡常这件事
查看原帖
关于卡常这件事
658786
STUDENT00楼主2022/11/27 15:31

最后一个点才1.11ms,建议加强数据。不然哪位卡常高手等一下就过了。。。

#include<bits/stdc++.h>
using namespace std;
int n,m,x,cnt;
char c;
bool vis[50005],flag=1;
int t[50005];
int read(){
	char c=getchar();
	int num=0;
	while(c<48||c>57) c=getchar();
	while(c>=48&&c<=57){
		num=(num<<1)+(num<<3)+c-48;
		c=getchar();
	}
	return num;
}
void print(int num){
	if(num){
		print(num/10);
		putchar(num%10+48);
	}
}
int main(){
	n=read();m=read();
	for(register int i=1;i<=n;i++){vis[i]=1;}
	while(m--){
		c=getchar();
		while((c^68)&&(c^82)&&(c^81)) c=getchar();
		if(!(c^68)){
			x=read();
			vis[x]=0;
			t[++cnt]=x;
			flag=0;
		}else if(!(c^82)){
			vis[t[cnt]]=1;
			cnt--;
			if(!cnt) flag=1;
		}else{
			x=read();
			if(flag){
				print(n);
				putchar(10);
				continue;
			}
			if(!vis[x]){
				putchar(48);
				putchar(10);
				continue;
			}
			int s=0;
			int t=x;
			while(t>=1&&vis[t]){t--;s++;}
			t=x+1;
			while(t<=n&&vis[t]){t++;s++;}
			print(s);
			putchar(10);
		}
	}
	return 0;
}
2022/11/27 15:31
加载中...