只过了 Hack
#include<iostream>
using namespace std;
int q;
struct node{
int x,lson,rson,lsiz,rsiz;
}a[10005];
int tot=1;
int Rank(int x,int v){
if(a[x].x>v&&a[x].lson)return Rank(a[x].lson,v);
else if(a[x].x>v)return 1;
else if(a[x].x<v&&a[x].rson)return a[x].lsiz+1+Rank(a[x].rson,v);
else if(a[x].x<v)return a[x].lsiz+2;
return a[x].lsiz+1;
}
int query(int x,int v){
if(v==0)return -2147483647;
if(v>=a[x].lsiz+a[x].rsiz+3)return 2147483647;
if(v<=a[x].lsiz)return query(a[x].lson,v);
if(v>a[x].lsiz+1)return query(a[x].rson,v-a[x].lsiz-1);
return a[x].x;
}
void insert(int x,int v){
if(a[x].x>v){
a[x].lsiz++;
if(a[x].lson)insert(a[x].lson,v);
else{
a[++tot]={v,0,0,0,0};
a[x].lson=tot;
}
}
if(a[x].x<v){
a[x].rsiz++;
if(a[x].rson)insert(a[x].rson,v);
else{
a[++tot]={v,0,0,0,0};
a[x].rson=tot;
}
}
}
int f;
int main(){
cin>>q;
while(q--){
int opt,x;
cin>>opt>>x;
if(opt==1)cout<<Rank(1,x)<<'\n';
if(opt==2)cout<<query(1,x)<<'\n';
if(opt==3){
int y=Rank(1,x);
cout<<query(1,y-1)<<'\n';
}
if(opt==4){
int y=Rank(1,x);
cout<<query(1,y+1)<<'\n';
}
if(opt==5){
if(!f)a[1].x=x,f=1;
else insert(1,x);
}
}
return 0;
}