#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int biao=317;
const int lduan=biao/2,yduan=biao*2;
struct blocklist{
struct kuai{
vector<int> v;
};list<kuai> l;
blocklist(vector<int> lin){
l.emplace_back();
for(int i=0;i<lin.size();i++){
l.back().v.emplace_back(lin[i]);
if(l.back().v.size()==biao)
l.emplace_back();
}
if(l.back().v.size()==0)
l.emplace_back();
}
list<kuai>::iterator get(int lin){
int wei=-2e9;
if(l.size()==0) return l.begin();
for(auto i=l.begin();i!=l.end();i++){
if(wei<lin&&lin<=i->v.back())
return i;
wei=i->v.back();
}
return l.begin();
}
void insert(int p){
auto i=get(p);
i->v.emplace(lower_bound(i->v.begin(),i->v.end(),p),p);
if(i->v.size()>yduan&&next(i)!=l.end()){
vector<int> flo;
for(auto k=i->v.end()-yduan;k!=i->v.end();k++)
flo.emplace_back(*k);
l.emplace(next(i),(kuai){flo});
for(auto k=i->v.end()-yduan;k!=i->v.end();k++)
i->v.erase(k);
}
}
void erase(int p){
auto i=get(p);
i->v.erase(lower_bound(i->v.begin(),i->v.end(),p));
if(i->v.size()<lduan&&next(i)!=l.end()){
vector<int> lin;
auto op=next(i);
op->v.insert(op->v.begin(),i->v.begin(),i->v.end());
auto next_i=next(i);
l.erase(i),i=next_i;
}
}
int clt(int n){
int ans=0;
for(auto i=l.begin();i!=l.end();i++){
if(i->v.back()<n)
ans+=i->v.size();
else{
for(auto j=i->v.begin();j!=i->v.end();j++)
if(*j<n)
ans++;
else
break;
}
}
return ans;
}
int kth(int n){
for(auto i=l.begin();i!=l.end();i++){
if(i->v.size()<n)
n=n-i->v.size();
else
return i->v[n];
}
return -1;
}
int pre(int p){
auto i=get(p);
auto ps=lower_bound(i->v.begin(),i->v.end(),p);
if(ps==i->v.begin()){
if(i!=l.begin())
return prev(i)->v.back();
else
return -1;
}
return *prev(ps);
}
int nex(int p){
auto i=get(p);
auto ps=upper_bound(i->v.begin(),i->v.end(),p);
if(ps==i->v.end()){
if(next(i)!=l.end())
return next(i)->v.front();
else
return -1;
}
return *ps;
}
};
blocklist tree=(vector<int>){INT_MIN,INT_MAX};
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;i++){
int opt;
cin>>opt;
if(opt==1){
int lin;
cin>>lin;
tree.insert(lin);
}
else if(opt==2){
int lin;
cin>>lin;
tree.erase(lin);
}
else if(opt==3){
int lin;
cin>>lin;
cout<<tree.clt(lin)<<endl;
}
else if(opt==4){
int lin;
cin>>lin;
cout<<tree.kth(lin)<<endl;
}
else if(opt==5){
int lin;
cin>>lin;
cout<<tree.pre(lin)<<endl;
}
else if(opt==6){
int lin;
cin>>lin;
cout<<tree.nex(lin)<<endl;
}
}
return 0;
}