RE记录 https://www.luogu.com.cn/record/140133384
#include<iostream>
#include<cstdio>
#include<algorithm>
#define int long long
#define N 10000010
using namespace std;
struct node{
int l,r,sum;
}tr[4*N];
int a[N],b[N],opt[N];
void build(int c,int x,int y){
tr[c].l=x,tr[c].r=y;
if(x==y) return;
int mid=(x+y)/2;
build(c*2,x,mid);
build(c*2+1,mid+1,y);
}
int query_rank(int c,int x,int y){
if(tr[c].l==x&&tr[c].r==y) return tr[c].sum;
int mid=(tr[c].l+tr[c].r)/2;
if(y<=mid) return query_rank(c*2,x,y);
else if(x>mid) return query_rank(c*2+1,x,y);
else return query_rank(c*2,x,mid)+query_rank(c*2+1,mid+1,y);
}
int query_num(int c,int x){
if(tr[c].l==tr[c].r) return tr[c].l;
if(x<=tr[c*2].sum) return query_num(c*2,x);
else return query_num(c*2+1,x-tr[c*2].sum);
}
void modify(int c,int x,int k){
if(tr[c].l==tr[c].r){
tr[c].sum+=k;
return;
}
int mid=(tr[c].l+tr[c].r)/2;
if(x<=mid) modify(c*2,x,k);
else modify(c*2+1,x,k);
tr[c].sum=tr[c*2].sum+tr[c*2+1].sum;
}
signed main(){
int n;
cin>>n;
build(1,1,n);
int x,k;
for(int i=1;i<=n;i++){
scanf("%lld%lld",&opt[i],&a[i]);
if(opt[i]!=4) b[++k]=a[i];
}
sort(b+1,b+k+1);
k=unique(b+1,b+k+1)-b-1;
int id;
for(int i=1;i<=n;i++){
if(opt[i]!=4) id=lower_bound(b+1,b+n+1,a[i])-b;
if(opt[i]==1) modify(1,id,1);
else if(opt[i]==2) modify(1,id,-1);
else if(opt[i]==3){
if(id==1) printf("1\n");
else printf("%lld\n",query_rank(1,1,id-1)+1);
}
else if(opt[i]==4) printf("%lld\n",b[query_num(1,a[i])]);
else if(opt[i]==5){
int m=query_rank(1,1,id-1);
printf("%lld\n",b[query_num(1,m)]);
}
else{
int m=query_rank(1,1,id+1);
printf("%lld\n",b[query_num(1,m)]);
}
}
return 0;
}