#include<bits/stdc++.h>
using namespace std;
int root,cnt;
const int inf=10000005;
struct tree{
int a[2],v,k,m,si;
}t[100005];
void pushu(int x){
t[x].si=t[t[x].a[0]].si+t[t[x].a[1]].si+t[x].m;
}
int newe(int val){
t[++cnt].v=val;
t[cnt].k=rand();
t[cnt].si=1;
t[cnt].m=1;
return cnt;
}
void bulid(){
root=newe(-inf),newe(inf);
t[1].a[1]=2;
pushu(root);
}
void klkl(int &x){
int id=t[x].a[1];
t[x].a[1]=t[id].a[0];
t[id].a[0]=x;
x=id;
pushu(x),pushu(t[x].a[0]);
}
void krkr(int &x){
int id=t[x].a[0];
t[x].a[0]=t[id].a[1];
t[id].a[1]=x;
x=id;
pushu(x),pushu(t[x].a[1]);
}
void add(int &p,int val){
if(!p) {
p=newe(val);
return;}
if(t[p].v==val) {
t[p].m++;
pushu(p);
return;
}
if(val<t[p].v){
add(t[p].a[0],val);
if(t[p].k<t[t[p].a[0]].k) krkr(p);
}
else{
add(t[p].a[1],val);
if(t[p].k<t[t[p].a[1]].k) klkl(p);
}
pushu(p);
}
void del(int &p,int val){
if(!p)return;
if(t[p].v==val){
if(t[p].m>1) {
t[p].m--;
pushu(p);
return;
}
if(t[p].a[0]||t[p].a[1]){
if(!t[p].a[0]||t[t[p].a[0]].k<t[t[p].a[1]].k) klkl(p),del(t[p].a[1],val);
else krkr(p),del(t[p].a[0],val);
pushu(p);
}
else {
p=0;
return;}
}
t[p].v<val?del(t[p].a[0],val):del(t[p].a[1],val);
pushu(p);
}
int pm(int p,int val){
if(!p) return 1;
if(t[p].v==val) return t[t[p].a[0]].si+1;
return t[p].v<val? pm(t[p].a[1],val):pm(t[p].a[0],val);
}
int mp(int p,int gw){
if(!p) return inf;
if(t[t[p].a[0]].si>=gw) return mp(t[p].a[0],gw);
if(t[t[p].a[0]].si+t[p].m>=gw) return t[p].v;
return mp(t[p].a[1],gw-t[t[p].a[0]].si-t[p].m);
}
int qq(int val){
int p=root,ans=1;
while(p){
if(t[p].v==val){
if(t[p].a[0]){
p=t[p].a[0];
while(t[p].a[1]) p=t[p].a[1];
ans=p;
}
break;
}
if(t[p].v<val&&t[ans].v<t[p].v) ans=p;
p=val<t[p].v?t[p].a[0]:t[p].a[1];
}
return t[ans].v;
}
int hx(int val){
int p=root,ans=2;
while(p){
if(t[p].v==val){
if(t[p].a[1]){
p=t[p].a[1];
while(t[p].a[0]) p=t[p].a[0];
ans=p;
}
break;
}
if(t[p].v>val&&t[ans].v>t[p].v) ans=p;
p=val<t[p].v?t[p].a[0]:t[p].a[1];
}
return t[ans].v;
}
int main(){
bulid();
int n,a,b;
scanf("%d",&n);
while(n--){
scanf("%d%d",&a,&b);
switch(a){
case 1:{
add(root,b);
break;
}
case 2:{
del(root,b);
break;
}
case 3:{
printf("%d\n",pm(root,b)-1);
break;
}
case 4:{
printf("%d\n",mp(root,b+1));
break;
}
case 5:{
printf("%d\n",qq(b));
break;
}
case 6:{
printf("%d\n",hx(b));
break;
}
}}
return 0;
}