#include<bits/stdc++.h>
#define int long long
#define double long double
#define INF INT_MAX
using namespace std;
const int maxn=5e5+5;
int n,root,cnt;
struct node{
int key,val,siz,l,r;
#define key(dq) t[dq].key
#define sum(dq) t[dq].val
#define siz(dq) t[dq].siz
#define l(dq) t[dq].l
#define r(dq) t[dq].r
}t[maxn];
void up_date(int dq){siz(dq)=siz(l(dq))+siz(r(dq))+1;}
int Merge(int x,int y){
if(!x || !y) return x+y;
if(key(x)<key(y)) {
r(x)=Merge(r(x),y);
up_date(x);
return x;
}
else{
l(y)=Merge(x,l(y));
up_date(y);
return y;
}
}
void Split(int dq,int d,int &x,int &y){
if(!dq){
x=y=0;
return;
}
if(sum(dq)<=d){
Split(r(dq),d,r(dq),y);
x=dq;
}
else{
Split(l(dq),d,x,l(dq));
y=dq;
}
up_date(dq);
}
void Insert(int dq){
key(++cnt)=rand();
sum(cnt)=dq;
siz(cnt)=1;
l(dq)=r(dq)=0;
int l,r;
Split(root,dq,l,r);
root=Merge(Merge(l,cnt),r);
}
void Delete(int dq){
int l,r;
Split(root,dq,l,r);
int zc1,zc2;
Split(l,dq-1,zc1,zc2);
root=Merge(Merge(zc1,Merge(l(zc2),r(zc2))),r);
}
int Rank(int dq){
int l,r;
Split(root,dq-1,l,r);
root=Merge(l,r);
return siz(l)+1;
}
int Kth(int dq,int d){
if(d==siz(l(dq))+1) return dq;
else if(d<=siz(l(dq))) return Kth(l(dq),d);
else return Kth(r(dq),d-siz(l(dq))-1);
}
int Pre(int dq){
int l,r;
Split(root,dq-1,l,r);
root=Merge(l,r);
return sum(Kth(l,siz(l)));
}
int Next(int dq){
int l,r;
Split(root,dq,l,r);
root=Merge(l,r);
return sum(Kth(r,1));
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
srand(time(NULL));
cin>>n;
while(n--){
int op,x;
cin>>op>>x;
if(op==1) Insert(x);
else if(op==2) Delete(x);
else if(op==3) cout<<Rank(x)<<endl;
else if(op==4) cout<<sum(Kth(root,x))<<endl;
else if(op==5) cout<<Pre(x)<<endl;
else cout<<Next(x)<<endl;
}
return 0;
}