45分求调(@一下,谢谢)
  • 板块P1503 鬼子进村
  • 楼主ammdyc
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/13 11:15
  • 上次更新2024/7/13 13:56:35
查看原帖
45分求调(@一下,谢谢)
743806
ammdyc楼主2024/7/13 11:15
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5e4;
ll n,m,a[N];
void add(ll x,ll d){
	for(int i=x;i<=n;i+=(-i)&i){
		a[i]+=d;
	}
}
ll q(ll x){
	ll ans=0;
	for(int i=x;i;i-=(-i)&i){
		ans+=a[i];
	}
	return ans;
}
stack<ll>s;
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		add(i,1);
	}
	while(m--){
		char ch;
		ll x;
		cin>>ch;
		if(ch=='D'){
			cin>>x;
			add(x,-1);
			s.push(x);
		}
		else if(ch=='R'){
			x=s.top();
			add(x,1);
			s.pop();
		}
		else if(ch=='Q'){
			cin>>x;
			if(q(x)-q(x-1)==0){
				cout<<0<<"\n";
				continue;
			}
			ll l=1,r=x,ans=0,ans2=0;
			while(l<=r){
				ll mid=(r+l)/2;
				if(q(x)-q(mid-1)==x-mid+1){
					r=mid-1;
					ans=mid;
				}
				else l=mid+1;
			}
			l=x;r=n;
			while(l<=r){
				ll mid=(l+r)/2;
				if(q(mid)-q(x-1)==mid-x+1){
					l=mid+1;ans2=mid;
				}
				else r=mid-1;
			}
			cout<<ans2-ans+1<<"\n";
		}
	}
	return 0;
}#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=5e4;
ll n,m,a[N];
void add(ll x,ll d){
	for(int i=x;i<=n;i+=(-i)&i){
		a[i]+=d;
	}
}
ll q(ll x){
	ll ans=0;
	for(int i=x;i;i-=(-i)&i){
		ans+=a[i];
	}
	return ans;
}
stack<ll>s;
int main(){
	ios::sync_with_stdio(false);cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		add(i,1);
	}
	while(m--){
		char ch;
		ll x;
		cin>>ch;
		if(ch=='D'){
			cin>>x;
			add(x,-1);
			s.push(x);
		}
		else if(ch=='R'){
			x=s.top();
			add(x,1);
			s.pop();
		}
		else if(ch=='Q'){
			cin>>x;
			if(q(x)-q(x-1)==0){
				cout<<0<<"\n";
				continue;
			}
			ll l=1,r=x,ans=0,ans2=0;
			while(l<=r){
				ll mid=(r+l)/2;
				if(q(x)-q(mid-1)==x-mid+1){
					r=mid-1;
					ans=mid;
				}
				else l=mid+1;
			}
			l=x;r=n;
			while(l<=r){
				ll mid=(l+r)/2;
				if(q(mid)-q(x-1)==mid-x+1){
					l=mid+1;ans2=mid;
				}
				else r=mid-1;
			}
			cout<<ans2-ans+1<<"\n";
		}
	}
	return 0;
}
2024/7/13 11:15
加载中...