#include<iostream>
#include<stdio.h>
#include<ctime>
#include<cstdlib>
#define ls(p) tr[p].ls
#define rs(p) tr[p].rs
#define val(p) tr[p].val
#define rnd(p) tr[p].rnd
#define size(p) tr[p].size
#define N 400010
#define INF 0x3f3f3f3f
inline int read()
{
int sum=0;
bool flag=0;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')flag=1;
c=getchar();
}
while(c>='0'&&c<='9')
{
sum=sum*10+c-'0';
c=getchar();
}
if(flag)return -sum;
else return sum;
}
int cnt,n,op,x,root;
struct Treap{
int ls,rs;
int val,rnd;
int size;
};
Treap tr[N];
void push_up(int p);
void newnode(int p);
int _rand();
void merge(int &rt,int x,int y);
void split(int rt,int y,int &a,int &b);
void del(int rt,int p);
void insert(int rt,int p);
int RTN(int rt,int p);
int NTR(int rt,int p);
int qq(int rt,int p);
int hq(int rt,int p);
int main() //^zxr防伪
{
n=read();
root=1; //^zxr保个底
newnode(INF);
rnd(root)=-INF;
for(int i=1;i<=n;i++)
{
op=read(),x=read();
if(op==1)insert(root,x);
if(op==2)del(root,x);
if(op==3)printf("%d\n",RTN(root,x)+1);
if(op==4)printf("%d\n",NTR(root,x));
if(op==5)printf("%d\n",qq(root,x));
if(op==6)printf("%d\n",hq(root,x));
}
return 0;
}
void push_up(int p)//√
{
size(p)=size(ls(p))+size(rs(p))+1;
}
int _rand()//√
{
srand(time(0));
return rand();
}
void newnode(int p)//√
{
cnt++;
val(cnt)=p;
size(cnt)=1;
rnd(cnt)=_rand();
}
void merge(int &rt,int x,int y)//√
{
if(x==0||y==0)
{
rt=x+y;
return ;
}
if(rnd(x)<=rnd(y))
{
rt=x;
merge(rs(rt),rs(x),y);
}
else{
rt=y;
merge(ls(rt),x,ls(y));
}
push_up(rt);
}
void split(int rt,int k,int &x,int &y)//√
{
if(rt==0)
{
x=0;
y=0;
return ;
}
if(val(rt)<=k)
{
x=rt;
split(rs(rt),k,rs(x),y);
}
else
{
y=rt;
split(ls(rt),k,x,ls(y));
}
push_up(rt);
}
void del(int rt,int x)//√
{
int px=0,py=0,pz=0;
split(rt,x,px,py);
split(px,x-1,px,pz);
merge(pz,ls(pz),rs(pz));
merge(px,px,pz);
merge(rt,px,py);
}
void insert(int rt,int val)//√
{
int px=0,py=0,pz=0;
newnode(val);
split(rt,val,px,py);
merge(px,px,cnt);
merge(rt,px,py);
}
int RTN(int rt,int k)//√
{
int x=0,y=0,jg=0;
split(rt,k-1,x,y);
jg=size(x);
merge(rt,x,y);
return jg;
}
int NTR(int rt,int k)
{
if(size(ls(rt))+1==k) return val(rt);
if(size(ls(rt))>=k) return NTR(ls(rt),k);
else return NTR(rs(rt),k-size(ls(rt))-1);
}
int qq(int rt,int x)
{
int px=0,py=0,jg=0;
split(rt,x-1,px,py);
jg=NTR(px,size(px));
merge(rt,px,py);
return jg;
}
int hq(int rt,int x)
{
int px=0,py=0,jg=0;
split(rt,x,px,py);
jg=NTR(py,1);
merge(rt,px,py);
return jg;
}