#include<bits/stdc++.h>
using namespace std;
int block,t,n,pos[20000005],num[5005],N=20000000,st[5005],ed[5005],mp[20000005],k=10000001,ans[100005];
void build(){
block=(int)sqrt(N);
t=N/block;
if(N%block){
t++;
}
for(int i=1;i<=t;i++){
st[i]=(i-1)*block+1;
ed[i]=i*block;
}
ed[t]=N;
for(int i=1;i<=N;i++){
pos[i]=(i-1)/block+1;
}
}
void insert(int x){
num[pos[x]]++;
}
void erase(int x){
num[pos[x]]--;
}
int find_top(int x){
int res=0,h=0,mk=0;
for(int i=1;i<=t;i++){
res+=num[i];
if(res>=x){
mk=i;
break;
}
h=res;
}
int y=x-h;
for(int i=st[mk];i<=ed[mk];i++){
if(y==1&&mp[i]>0){
return i;
}
y-=mp[i];
}
}
int get_top(int l,int r){
int p=pos[l];
int q=pos[r];
if(p==q){
int res=0;
for(int i=l;i<=r;i++){
res+=mp[i];
}
return res;
}
else{
int res=0;
for(int i=l;i<=ed[p];i++){
res+=mp[i];
}
for(int i=st[q];i<=r;i++){
res+=mp[i];
}
for(int i=p+1;i<=q-1;i++){
res+=num[i];
}
return res;
}
}
int find1(int x){
int p=pos[x];
for(int i=p;i>=1;i--){
if(num[i]>0){
for(int j=x;j>=st[i];j--){
if(mp[j]>0){
return j;
}
}
}
}
}
int find2(int x){
int p=pos[x];
for(int i=p;i<=t;i++){
if(num[i]>0){
for(int j=x;j<=ed[i];j++){
if(mp[j]>0){
return j;
}
}
}
}
}
int main()
{
build();
int cnt=0;
cin>>n;
for(int i=1;i<=n;i++){
int op,x;
cin>>op>>x;
if(op==1){
insert(x+k);
mp[x+k]++;
}
else if(op==2){
erase(x+k);
mp[x+k]--;
}
else if(op==3){
// cout<<<<endl;
ans[++cnt]=get_top(1,x+k-1)+1;
}
else if(op==4){
// cout<<<<endl;
ans[++cnt]=find_top(x)-k;
}
else if(op==5){
// cout<<<<endl;
ans[++cnt]=find1(x-1+k)-k;
}
else{
// cout<<<<endl;
ans[++cnt]=find2(x+k+1)-k;
}
}
for(int i=1;i<=cnt;i++){
cout<<ans[i]<<endl;
}
return 0;
}