#include<bits/stdc++.h>
#define afor(x,y,z) for(int x=y;x<=z;x++)
#define bfor(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
typedef long long ll;
typedef const int cint;
cint N=100010;
struct Treap{
int root,tot,lson[N],rson[N],val[N],key[N],siz[N],cnt[N];
int newnode(int x) {
val[++tot]=x;
key[tot]=rand()+1;
siz[tot]=cnt[tot]=1;
return tot;
}
void update(int x) {
siz[x]=siz[lson[x]]+siz[rson[x]]+cnt[x];
}
void zig(int &x) {
int y=lson[x];
lson[x]=rson[y],rson[y]=x,x=y;
update(rson[x]),update(x);
}
void zag(int &x) {
int y=rson[x];
rson[x]=lson[y],lson[y]=x,x=y;
update(lson[x]),update(x);
}
void insert(int &x,int y) {
if(!x) x=newnode(y);
else if(val[x]==y) cnt[x]++,siz[x]++;
else if(val[x]>y) {
insert(lson[x],y);
if(key[lson[x]]>key[x]) zig(x);
}
else {
insert(rson[x],y);
if(key[rson[x]]>key[x]) zag(x);
}
update(x);
}
void delate(int &x,int y) {
if(!x) return;
if(val[x]==y) {
if(cnt[x]>1) {
cnt[x]--,siz[x]--;
return;
}
if(lson[x]||rson[x]) {
if(!rson[x]||key[lson[x]]>key[rson[x]])
zig(x),delate(rson[x],y);
else zag(x),delate(lson[x],y);
update(x);
}
else x=0;
}
else if(val[x]>y) delate(lson[x],y);
else delate(rson[x],y);
if(x) update(x);
}
int getrank(int x,int y) {
if(!x) return 1;
if(val[x]==y) return siz[lson[x]]+1;
if(val[x]>y) return getrank(lson[x],y);
return siz[lson[x]]+cnt[x]+getrank(rson[x],y);
}
int getval(int x,int y) {
if(!x) return 0;
if(siz[lson[x]]+cnt[x]<y)
return getval(rson[x],y-siz[lson[x]]-cnt[x]);
else if(lson[x]>=y) return getval(lson[x],y);
else return val[x];
}
int getpre(int x,int y) {
if(!x) return -0x7fffffff;
if(val[x]<y) return max(val[x],getpre(rson[x],y));
else return getpre(lson[x],y);
}
int getnxt(int x,int y) {
if(!x) return 0x7fffffff;
if(val[x]>y) return min(val[x],getnxt(lson[x],y));
else return getnxt(rson[x],y);
}
} tr;
int n,opt,x;
int main() {
scanf("%d",&n);
afor(i,1,n) {
scanf("%d%d",&opt,&x);
if(opt==1) tr.insert(tr.root,x);
else if(opt==2) tr.delate(tr.root,x);
else if(opt==3) printf("%d\n",tr.getrank(tr.root,x));
else if(opt==4) printf("%d\n",tr.getval(tr.root,x));
else if(opt==5) printf("%d\n",tr.getpre(tr.root,x));
else printf("%d\n",tr.getnxt(tr.root,x));
}
return 0;
}