#include <bits/stdc++.h>
using namespace std;
const long long N = 1000001;
long long n,root,sum,opt,x;
struct Node {
long long l,r,s,v,d;
Node(long long l,long long r,long long s,long long v)
: l(l),r(r),s(s),v(v),d(1){}
Node(){}
}t[N];
inline void update(long long root){
t[root].s = t[t[root].l].s + t[t[root].r].s + t[root].d;
}
long long r(long long x,long long root){
if(root){
if(x < t[root].v){
return r(x,t[root].l);
}
if(x > t[root].v){
return r(x,t[root].r) + t[t[root].l].s + t[root].d;
}
return t[t[root].l].s + t[root].d;
}
return 1;
}
long long kth(long long x,long long root){
if(x <= t[t[root].l].s){
return kth(x,t[root].l);
}
if(x <= t[t[root].l].s + t[root].d){
return t[root].v;
}
return kth(x - t[t[root].l].s - t[root].d,t[root].r);
}
void insert(long long x,long long & root){
if(x < t[root].v){
if(!t[root].l){
t[t[root].l = ++sum] = Node(0,0,1,x);
}else{
insert(x,t[root].l);
}
}else if(x > t[root].v){
if(!t[root].r){
t[t[root].r = ++sum] = Node(0,0,1,x);
}else{
insert(x,t[root].r);
}
}else{
t[root].d++;
}
update(root);
}
int main(){
cin >> n;
long long cnt = 0;
t[root = ++sum] = Node(0,0,1,2147483647);
while(n--){
cin >> opt >> x;
cnt++;
if(opt == 1){
cout << r(x,root) << endl;
}else if(opt == 2){
cout << kth(x,root) << endl;
}else if(opt == 3){
cout << kth(r(x,root) - 1,root) << endl;
}else if(opt == 4){
cout << kth(r(x + 1,root),root) << endl;
}else{
cnt--;
insert(x,root);
}
}
return 0;
}