#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ls(x) tr[x].lson
#define rs(x) tr[x].rson
const int N=1e5+5;
int n,op,x;
struct fhq{
struct node{int lson,rson;int val,pri;int siz;};
int root,cnt;node tr[N];
void pushup(int x){tr[x].siz=tr[ls(x)].siz+tr[rs(x)].siz+1;}
int newnode(int x){tr[++cnt]={0,0,x,rand(),1};return cnt;}
void split(int u,int v,int &x,int &y){
if(!u){x=y=0;return;}
if(tr[u].val<=v) x=u,split(rs(u),v,rs(u),y);
else y=u,split(ls(u),v,x,ls(u));
}
int merge(int x,int y){
if(!x||!y) return x+y;
if(tr[x].pri<tr[y].pri){rs(x)=merge(rs(x),y);pushup(x);return x;}
else{ls(x)=merge(x,ls(y));pushup(y);return y;}
}
int kth(int u,int k){
while(1){
if(k==tr[ls(u)].siz+1) return u;
if(k<=tr[ls(u)].siz) u=ls((u));
else k-=tr[ls(u)].siz+1,u=rs(u);
}
}
void ins(int v){
int x,y,z=newnode(v);split(root,v,x,y);
root=merge(merge(x,z),y);
}
void del(int v){
int x,y,z;split(root,v,x,z),split(x,v-1,x,y);
y=merge(ls(y),rs(y)),root=merge(merge(x,y),z);
}
int rnk(int v){
int x,y,t;split(root,v-1,x,y);
t=tr[x].siz+1,root=merge(x,y);return t;
}
int pre(int v){
int x,y,t;split(root,v-1,x,y);
t=kth(x,tr[x].siz),root=merge(x,y);return t;
}
int suf(int v){
int x,y,t;split(root,v-1,x,y);
t=kth(y,1),root=merge(x,y);return t;
}
};
fhq tr;
signed main(){
ios::sync_with_stdio(0);
cin.tie(nullptr);
cin>>n;
while(n--){
cin>>op>>x;
if(op==1) tr.ins(x);
if(op==2) tr.del(x);
if(op==3) cout<<tr.rnk(x)<<endl;
if(op==4) cout<<tr.tr[tr.kth(tr.root,x)].val<<endl;
if(op==5) cout<<tr.tr[tr.pre(x)].val<<endl;
if(op==6) cout<<tr.tr[tr.suf(x)].val<<endl;
}
return 0;
}