#include<bits/stdc++.h>
using namespace std;
#define int long long
int _;
int root,tot;
struct Treap
{
int l,r;
int val,random;
int sze,cnt;
} t[100005];
int newnode(int x)
{
t[++tot].val=x,t[tot].sze=t[tot].cnt=1,t[tot].random=rand();
return tot;
}
void pushup(int p)
{
t[p].sze=t[t[p].l].sze+t[t[p].r].sze+1;
}
void build()
{
newnode(INT_MIN),newnode(INT_MAX);
root=1,t[1].r=2,pushup(1);
}
void zag(int &p)
{
int q=t[p].r;
t[p].r=t[q].l,t[q].l=p;
pushup(p),pushup(q),p=q;
}
void zig(int &p)
{
int q=t[p].l;
t[p].l=t[q].r,t[q].r=p;
pushup(p),pushup(q),p=q;
}
bool ask(int p,int x)
{
if(p==0) return 0;
if(t[p].val==x) return 1;
if(t[p].val<x) return ask(t[p].r,x);
else return ask(t[p].l,x);
}
void insert(int &p,int val)
{
if(p==0) return (void)(p=newnode(val));
if(t[p].val==val) return (void)(t[p].cnt++);
if(t[p].val>val) insert(t[p].l,val),(t[p].random<t[t[p].l].random)?zig(p),1:1;
else insert(t[p].r,val),(t[p].random<t[t[p].r].random)?zag(p),1:1;
pushup(p);
}
void erase(int &p,int val)
{
if(t[p].val==val)
{
if(t[p].cnt>1) return (void)(t[p].cnt--);
if(t[p].l||t[p].r)
{
if(!t[p].r||t[t[p].l].random>t[t[p].r].random) zig(p),erase(t[p].r,val);
else zag(p),erase(t[p].l,val);
pushup(p);
}
else p=0;
return ;
}
if(val<t[p].val) erase(t[p].l,val);
else erase(t[p].r,val);
}
int getrank(int p,int val)
{
if(p==0) return 0;
if(t[p].val==val) return t[t[p].l].sze+1;
if(t[p].val>val) return getrank(t[p].l,val);
else return t[t[p].l].sze+t[p].cnt+getrank(t[p].r,val);
}
int getval(int p,int rank)
{
if(p==0) return INT_MAX;
if(t[t[p].l].sze>=rank) return getval(t[p].l,rank);
if(t[t[p].l].sze+t[p].cnt>=rank) return t[p].val;
else return getval(t[p].r,rank-t[t[p].l].sze-t[p].cnt);
}
int getpre(int p,int x)
{
int ans=INT_MIN;
while(p)
{
if(x==t[p].val)
{
if(t[p].l)
{
p=t[p].l;
while(t[p].r) p=t[p].r;
ans=t[p].val;
}
break;
}
(t[p].val<x)?ans=max(ans,t[p].val):1;
p=(x<t[p].val)?t[p].l:t[p].r;
}
return ans;
}
int getnxt(int p,int x)
{
int ans=INT_MAX;
while(p)
{
if(x==t[p].val)
{
if(t[p].r)
{
p=t[p].r;
while(t[p].l) p=t[p].l;
ans=t[p].val;
}
break;
}
(t[p].val>x)?ans=min(ans,t[p].val):1;
p=(x<t[p].val)?t[p].l:t[p].r;
}
return ans;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
srand((unsigned)(time(0)));
cin>>_;
build();
while(_--)
{
int op,x;
cin>>op>>x;
if(op==1) insert(root,x);
else if(op==2) erase(root,x);
else if(op==3) cout<<getrank(root,x-1)<<'\n';
else if(op==4) cout<<getval(root,x+1)<<'\n';
else if(op==5) cout<<getpre(root,x)<<'\n';
else if(op==6) cout<<getnxt(root,x)<<'\n';
}
return 0;
}