#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxx=100005;
const int maxn=30000007;
int a[maxx];
int ans[maxn];
int n;
int ls(int p)
{
return p<<1;
}
int rs(int p)
{
return p<<1|1;
}
void pushup(int p)
{
ans[p]=ans[ls(p)]+ans[rs(p)];
}
void build(int p,int l,int r)
{
if(l==r)
{
ans[p]=0;
return;
}
int mid=(l+r)>>1;
build(ls(p),l,mid);
build(rs(p),mid+1,r);
pushup(p);
}
void update(int p,int l,int r,int id,int x)
{
if(l==r)
{
ans[p]+=x;
return ;
}
int mid=(l+r)>>1;
if(id<=mid)update(ls(p),l,mid,id,x);
if(id>mid) update(rs(p),mid+1,r,id,x);
pushup(p);
}
int query(int p,int l,int r,int qx,int qy)
{
int res=0;
if(qx<=l&&qy>=r)
{
return ans[p];
}
int mid=(l+r)>>1;
if(qx<=mid)res+=query(ls(p),l,mid,qx,qy);
if(qy>mid) res+=query(rs(p),mid+1,r,qx,qy);
return res;
}
int find(int p,int l,int r,int k)
{
if(l==r)
{
return l;
}
int mid=(l+r)>>1;
if(ans[ls(p)]>=k)find(ls(p),l,mid,k);
if(ans[ls(p)]<k)find(rs(p),mid+1,r,k-ans[ls(p)]);
return -1;
}
signed main(){
cin>>n;
build(1,-10000007,10000007);
while(n--)
{
int opt,x;
scanf("%lld%lld",&opt,&x);
if(opt==1)
{
update(1,-10000007,10000007,x,1);
}
if(opt==2)
{
update(1,-10000007,10000007,x,-1);
}
if(opt==3)
{
int cnt=0;
cnt=query(1,-10000007,10000007,-10000007,x-1)+1;
printf("%lld\n",cnt);
}
if(opt==4)
{
printf("%lld\n",find(1,-10000007,10000007,x));
}
if(opt==5)
{
int cnt=0;
cnt=query(1,-10000007,10000007,-10000007,x-1);
printf("%lld\n",find(1,-10000007,10000007,cnt));
}
if(opt==6)
{
int cnt=0;
cnt=query(1,-10000007,10000007,-10000007,x);
printf("%lld\n",find(1,-10000007,10000007,cnt+1));
}
}
return 0;
}