只有63分
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
const double alf=0.81;
int c[N][2];
int siz[N];//不算被删
int val[N];//值
int esiz[N];//算上被删
int s[N];//k的个数,为0表示不存在(被删
vector<int> v;
int n;
stack<int> sta;
int cnt;
int read()
{
char c;
int w=1;
while((c=getchar())>'9'||c<'0')if(c=='-')w=-1;
int ans=c-'0';
while((c=getchar())>='0'&&c<='9')ans=(ans<<1)+(ans<<3)+c-'0';
return ans*w;
}
void updata(int k){
siz[k]=siz[c[k][0]]+siz[c[k][1]]+s[k];
esiz[k]=esiz[c[k][0]]+esiz[c[k][1]]+1+max(s[k],1);
}
int laji(int x){
int k=0;
if(!sta.empty()){
k=sta.top();
c[k][0]=c[k][1]=0;
siz[k]=s[k]=val[k]=0;
sta.pop();
}
else k=++cnt;
siz[k]=s[k]=esiz[k]=1;
val[k]=x;
return k;
}
void rbuild(int l,int r,int &k){//重构
if(l>r) return ;
int mid=l+r>>1;
k=v[mid];
c[k][0]=0;
c[k][1]=0;
if(l!=r){
rbuild(l,mid-1,c[k][0]);
rbuild(mid+1,r,c[k][1]);
}
updata(k);
}
/*void rbuild(int &k,int l,int r)
{
if(l>r)return ;
int mid=l+r>>1;
k=v[mid];
c[k][0]=0;
c[k][1]=0;
if(l!=r)
{
rbuild(c[k][0],l,mid-1);
rbuild(c[k][1],mid+1,r);
}
updata(k);
}*/
void dfs(int k){
//puts("2");
if(c[k][0]) dfs(c[k][0]);
if(s[k]) v.push_back(k);
else sta.push(k);
if(c[k][1]) dfs(c[k][1]);
// return ;
}
void build(int &k){
v.clear();
v.push_back(0);
dfs(k);
k=0;
int s=v.size()-1;
rbuild(1,s,k);
}
/*void build(int &k)
{
v.clear();
v.push_back(0);
dfs(k);
k=0;
int s=v.size()-1;
rbuild(k,1,s);
}*/
bool check(int k){
if(s[k]){
if(esiz[c[k][0]]>=esiz[k]*alf||esiz[c[k][1]]>=esiz[k]*alf||siz[k]<=esiz[k]*alf){
return 1;
}
return 0;
}
return 0;
}
void insert(int &k,int v){
if(!k){
k=laji(v);
return ;
}
//puts("1");
if(v==val[k]){
s[k]++;
updata(k);
return ;
}
if(v<val[k]){
insert(c[k][0],v);
}
else{
insert(c[k][1],v);
}
updata(k);
if(check(k)) build(k);
}
void erase(int &k,int v){
if(v==val[k]){
s[k]--;
updata(k);
return ;
}
if(v<val[k]){
erase(c[k][0],v);
}
else{
erase(c[k][1],v);
}
updata(k);
if(check(k)) build(k);
}
int find(int k,int x){
// cout<<val[k]<<endl;
if(!k) return 0;
if(val[k]==x) return siz[c[k][0]];
if(x<val[k]) return find(c[k][0],x);
else return find(c[k][1],x)+siz[c[k][0]]+s[k];
}
int th(int k,int x){
//cout<<siz[c[k][0]]<<endl;
//return 0;
if(x<=siz[c[k][0]]) return th(c[k][0],x);
x-=siz[c[k][0]];
if(x<=s[k]) return val[k];
x-=s[k];
return th(c[k][1],x);
}
/*int th(int k,int x)
{
// cout<<siz[c[k][0]]<<endl;
if(x<=siz[c[k][0]])return th(c[k][0],x);
x-=siz[c[k][0]];
if(x<=s[k])return val[k];
x-=s[k];
return th(c[k][1],x);
}*/
signed main(){
n=read();
int r=0;
while(n--){
int opt;
opt=read();
if(opt==1){
int x;
x=read();
insert(r,x);
}
if(opt==2){
int x;
x=read();
erase(r,x);
}
if(opt==3){
int x;
x=read();
printf("%d\n",find(r,x)+1);
}
if(opt==4){
int x;
x=read();
printf("%d\n",th(r,x));
}
if(opt==5){
int x;
x=read();
printf("%d\n",th(r,find(r,x)));
}
if(opt==6){
int x;
x=read();
// cout<<find(r,x+1)<<endl;
printf("%d\n",th(r,find(r,x+1)+1));
}
}
return 0;
}