65Pts,求调
查看原帖
65Pts,求调
628248
CCF_Friend楼主2024/4/8 21:55
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+10;
map<int,int> m;
struct fan
{
	int lp,rp;
	int num;
}t[maxn<<6];
int n,cnt,root;
void build(ll l,ll r,ll x,int &rt)
{
	if(!rt)
	{
		rt=++cnt;
		t[rt]={0,0,0};
	}
	t[rt].num++;
	ll mid=(l+r-1)>>1;
	if(l==r) return;
	if(x<=mid) build(l,mid,x,t[rt].lp);
	else build(mid+1,r,x,t[rt].rp);
}
void Delete(ll l,ll r,ll x,int rt)
{
	t[rt].num--;
	if(l==r) return;
	ll mid=(l+r-1)>>1;
	if(x<=mid) Delete(l,mid,x,t[rt].lp);
	else Delete(mid+1,r,x,t[rt].rp);
}
ll query1(ll l,ll r,ll x,int rt)
{
	if(l==r) return 1;
	ll mid=(l+r-1)>>1;
	if(x>mid) return query1(mid+1,r,x,t[rt].rp)+t[t[rt].lp].num;
	else return query1(l,mid,x,t[rt].lp);
}
ll query(ll l,ll r,ll x,int rt)
{
	if(l==r) return l;
	ll sum=t[t[rt].lp].num;
	ll mid=(l+r-1)>>1;
	if(sum>=x) return query(l,mid,x,t[rt].lp);
	else return query(mid+1,r,x-sum,t[rt].rp);
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int opt; 
        ll x;
		cin>>opt>>x;
		if(opt==1) build(-1e7,1e7,x,root),m[x]++;
		if(opt==2) Delete(-1e7,1e7,x,root),m[x]--;
		if(opt==3) cout<<query1(-1e7,1e7,x,root)<<endl;
		if(opt==4) cout<<query(-1e7,1e7,x,root)<<endl;
		if(opt==5) cout<<query(-1e7,1e7,query1(-1e7,1e7,x,root)-1,root)<<endl;
		if(opt==6)
		{
			if(m.count(x)==0) cout<<query(-1e7,1e7,query1(-1e7,1e7,x,root),root)<<endl;
			else cout<<query(-1e7,1e7,query1(-1e7,1e7,x,root)+1,root)<<endl;
		}
	}
	return 0;
}
2024/4/8 21:55
加载中...