//OOOOOOOOOOOOOOOOrz
#include<bits/stdc++.h>
using namespace std;
inline int rd(){
int num=0,sign=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') sign=-1; ch=getchar();}
while (ch>='0'&&ch<='9') num=(num<<3)+(num<<1)+(ch^48),ch=getchar();
return num*sign;
}
const int N=1e5+7;
struct Treap{
int ls,rs,siz,val,key;
}t[N];
int root,node;
mt19937 rnd(233);
int new_node(int x){
t[++node]={0,0,1,x,rnd()};
return node;
}
void pushup(int id){
t[id].siz=t[t[id].ls].siz+t[t[id].rs].siz+1;
}
void split(int now,int val,int &x,int &y){
if(!now) return x=y=0,void();
if(t[now].val<=val) x=now,split(t[now].rs,val,t[now].rs,y);
else y=now,split(t[now].ls,val,x,t[now].ls);
pushup(now);
}
int merge(int x,int y){
if(!x||!y) return x^y;
if(t[x].key>t[y].key){
t[x].rs=merge(t[x].rs,y);
pushup(x);
return x;
}
else{
t[y].ls=merge(x,t[y].ls);
pushup(y);
return y;
}
}
void insert(int val){
int x,y;
split(root,val,x,y);
root=merge(merge(x,new_node(val)),y);
}
void erase(int val){
int x,y,z;
split(root,val,x,y);
split(root,val-1,x,z);
z=merge(t[z].ls,t[z].rs);
root=merge(merge(x,z),y);
}
int nlt(int val){
int x,y;
split(root,val-1,x,y);
int ans=t[x].siz+1;
root=merge(x,y);
return ans;
}
int kth(int id,int k){
if(t[t[id].ls].siz+1==k) return t[id].val;
if(t[t[id].ls].siz>=k) return kth(t[id].ls,k);
return kth(t[id].rs,k-t[t[id].ls].siz-1);
}
int pre(int x){
return kth(root,nlt(x)-1);
}
int nxt(int x){
return kth(root,nlt(x+1));
}
int main(){
int T=rd();
while(T--){
int op=rd(),x=rd();
if(op==1) insert(x);
if(op==2) erase(x);
if(op==3) printf("%d\n",nlt(x));
if(op==4) printf("%d\n",kth(root,x));
if(op==5) printf("%d\n",pre(x));
if(op==6) printf("%d\n",nxt(x));
}
return 0;
}
有没有人帮帮小帅,把可恶的MLE答辩绳之以法