#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define _ 500005
ll n,rt,siz;
struct Splay {
#define ls(x) tr[x].son[0]
#define rs(x) tr[x].son[1]
#define fa(x) tr[x].fa
struct point {ll son[2],fa,siz,num,w;}tr[_];
ll tot;
void pushup(ll x) {tr[x].siz=tr[ls(x)].siz+tr[rs(x)].siz+tr[x].num;}
ll check(ll x) {return tr[fa(x)].son[1]==x;}
void rotate(ll x) {
ll fa=fa(x),ffa=fa(fa),op=check(x);
if(ffa) tr[ffa].son[check(fa)]=x;tr[x].fa=ffa;
tr[fa].son[op]=tr[x].son[op^1];
if(tr[x].son[op^1]) tr[tr[x].son[op^1]].fa=fa;
tr[fa].fa=x;tr[x].son[op^1]=fa;
pushup(fa),pushup(x);
}
void splay(ll x,ll goal) {
while(fa(x)!=goal) {
ll fa=fa(x);
if(fa(fa)!=goal) rotate((check(x)^check(fa))?fa:x);
rotate(x);
}
if(!goal) rt=x;
}
void add(ll &x,ll k,ll fa) {
if(!x) {
x=++tot;
tr[x].num=1;
tr[x].w=k;
tr[x].fa=fa;
splay(x,0);
return ;
}
if(k==tr[x].w) {
tr[x].num++;
splay(x,0);
return ;
}
if(tr[x].w<k) add(rs(x),k,x);
if(tr[x].w>k) add(ls(x),k,x);
pushup(x);
}
ll getranks(ll x,ll k) {
if(!x) return 1;
if(k>tr[x].w) return getranks(rs(x),k)+tr[x].num+tr[ls(x)].siz;
if(k<=tr[x].w) return getranks(ls(x),k);
return -1;
}
ll ranks(ll x,ll k) {
if(!x) return 0;
if(k-tr[ls(x)].siz<=tr[x].num&&k>tr[ls(x)].siz) {return tr[x].w;}
if(k<=tr[ls(x)].siz) return ranks(ls(x),k);
else return ranks(rs(x),k-tr[ls(x)].siz-tr[x].num);
}
ll get_pre(ll x,ll k,ll op) {
ll ans=0;
while(x) {
if(tr[x].w<k) ans=x,x=rs(x);
else x=ls(x);
}
if(op) return ans;
else return tr[ans].w;
}
ll get_next(ll x,ll k,ll op) {
ll ans=0;
while(x) {
if(tr[x].w>k) ans=x,x=ls(x);
else x=rs(x);
}
if(op) return ans;
else return tr[ans].w;
}
void del(ll k) {
ll u1=get_pre(rt,k,1),u2=get_next(rt,k,1);
splay(u1,0),splay(u2,u1);
ll x=ls(u2);
if(tr[x].num>1) {
tr[x].num--;
pushup(x),pushup(u2),pushup(u1);
return ;
}
tr[x].num=0;
tr[u2].son[0]=0,tr[x].fa=0;
pushup(x),pushup(u2),pushup(u1);
}
}tr;
int main() {
freopen("P3369_5.in", "r", stdin);
freopen("P3369.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
tr.add(rt,INT_MAX,0);
tr.add(rt,INT_MIN,0);
while(n--) {
ll op,x;cin>>op>>x;
if(op==1) tr.add(rt,x,0),siz++;
if(op==2) tr.del(x),siz--;
if(op==3) cout<<tr.getranks(rt,x)-1<<'\n';
if(op==4) cout<<tr.ranks(rt,x+1)<<'\n';
if(op==5) cout<<tr.get_pre(rt,x,0)<<'\n';
if(op==6) cout<<tr.get_next(rt,x,0)<<'\n';
}
return 0;
}