#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
const int inf=0x3f3f3f3f;
struct Treap{
int ch[maxn][2],sz[maxn],w[maxn],pri[maxn],val[maxn],tot;
int ans,rt;
void pushup(int now){
sz[now]=w[now]+sz[ch[now][0]]+sz[ch[now][1]];
}
void rotate(int& x,bool p){
int tmp=ch[x][p];
ch[x][p]=ch[tmp][p^1];
ch[tmp][p^1]=x;
sz[tmp]=sz[x];
pushup(x);
x=tmp;
}
void insert(int &k,int v){
if(!k){
pri[++tot]=rand();
val[tot]=v;
w[tot]=sz[tot]=1;
k=tot;
return;
}
if(val[k]==v){
sz[k]++;
w[k]++;
return;
}
sz[k]++;
if(v<val[k]){
if(ch[k][0])insert(ch[k][0],v);
}
if(v<val[k]){
insert(ch[k][0],v);
if(pri[k]>pri[ch[k][0]])rotate(k,0);
}else{
insert(ch[k][1],v);
if(pri[k]>pri[ch[k][1]])rotate(k,1);
}
}
bool remove(int& k,int v){
if(!k){
return 0;
}
if(val[k]==v){
if(w[k]>1){
sz[k]--;
w[k]--;
return 1;
}
if(pri[ch[k][0]]>pri[ch[k][1]])rotate(k,0),remove(ch[k][1],v);
else rotate(k,1),remove(ch[k][0],v);
return 1;
}
if(val[k]>v){
bool d=remove(ch[k][0],v);
sz[k]-=d;
return d;
}else{
bool d=remove(ch[k][1],v);
sz[k]-=d;
return d;
}
}
int rnk(int k,int v){
if(!k)return -1;
if(val[k]==v){
return sz[ch[k][0]]+1;
}
int ans=0;
if(val[k]<v){
ans+=sz[ch[k][0]]+w[k];
ans+=rnk(ch[k][1],v);
}else{
ans+=rnk(ch[k][0],v);
}
return ans;
}
int findk(int k,int x){
if(!k)return inf;
if(x<=sz[ch[k][0]]){
return findk(ch[k][0],x);
}else if(x<=sz[ch[k][0]]+w[k]){
return val[k];
}else{
return findk(ch[k][1],x-sz[ch[k][0]]-w[k]);
}
}
void pre(int k,int v){
if(!k)return;
if(v<=val[k]){
pre(ch[k][0],v);
}else{
ans=val[k],pre(ch[k][1],v);
}
}
void suf(int k,int v){
if(!k)return;
if(v>=val[k]){
suf(ch[k][1],v);
}else{
ans=val[k],suf(ch[k][0],v);
}
}
}t;
int n,op,x;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
srand(time(0));
cin>>n;
while(n--){
cin>>op>>x;
if(op==1)t.insert(t.rt,x);
if(op==2)t.remove(t.rt,x);
if(op==3)cout<<t.rnk(t.rt,x)<<"\n";
if(op==4)cout<<t.findk(t.rt,x)<<"\n";
if(op==5)t.pre(t.rt,x),cout<<t.ans<<"\n";
if(op==6)t.suf(t.rt,x),cout<<t.ans<<"\n";
}
return 0;
}
dalao帮我调一下。。。