本题分块64分求调
查看原帖
本题分块64分求调
465055
1004779564bzbjj楼主2024/6/26 17:13
#include<bits/stdc++.h>
using namespace std;
int n,m,b[514],a[51411],la[51411],p;
int main(){
	cin>>n>>m;
	b[0]++;a[0]++;
	a[n+1]++;b[(n+1)/100]++;
	int N=(n+1)/100;
	for(int i=1;i<=m;i++){
		char c;int x;
		cin>>c;
		if(c=='D'){
			cin>>x;
			p++;
			la[p]=x;
			a[x]++;
			b[x/100]++;
		}
		if(c=='R'){
			b[la[p]/100]-=a[la[p]];
			a[la[p]]=0;
			p--;
		}
		if(c=='Q'){
			cin>>x;
			int le=0,ri=0;
			if(a[x]!=0){
				cout<<0<<endl;
				continue;
			}
			//
			for(int i=x;i%100!=0;i--){
				if(a[i]!=0&&i!=x){
					le=i;
					break;
				}
			}
			if(le==0)
			if(a[100*(int)(x/100)]!=0)le=100*(int)(x/100);
			if(le==0){
				for(int i=x/100-1;i>=0;i--){
					if(b[i]!=0){
						for(int j=i*100+99;j>=i*100;j--){
							if(a[j]!=0){
								le=j;
								break;
							}
						}
					}
					if(le!=0)break;
				}
			}
			//
			for(int i=x;i%100!=99;i++){
				if(a[i]!=0&&i!=x){
					ri=i;
					break;
				}
			}
			if(ri==0)
			if(a[100*(int)(x/100)+100]!=0)ri=100*(int)(x/100)+100;
			if(ri==0){
				for(int i=x/100+1;i<=N;i++){
					if(b[i]!=0){
						for(int j=i*100;j<=i*100+99;j++){
							if(a[j]!=0){
								ri=j;
								break;
							}
						}
					}
					if(ri!=0)break;
				}
			}
			//
			//cout<<le<<" "<<ri<<endl;
			cout<<ri-le-1<<endl;
		}
		//cout<<a[0]<<a[1]<<a[2]<<a[3]<<a[4]<<a[5]<<a[6]<<a[7]<<a[8]<<a[9]<<endl;
	}
	return 0;
} 

WA:3(119行2号),4(129行2号),5(159行1号),8(269行1号)

9和10是对的

2024/6/26 17:13
加载中...