#include<bits/stdc++.h>
using namespace std;
const int sz=317,th=2*sz;
typedef int var;
struct SK{
SK(vector<var> q){
sort(q.begin(),q.end());
dt.emplace_back();
for(int i=0;i<q.size();i++){
dt.back().emplace_back(q[i]);
if(dt.back().size()==sz)
dt.emplace_back();
}
if(dt.back().size()==0)
dt.emplace_back();
}
vector<vector<var>> dt;
int get(int lin){
int wei=-2e9;
if(dt.size()==0) return -1;
for(int i=0;i<dt.size();i++){
if(wei<lin&&lin<=dt[i].back())
return i;
wei=dt[i].back();
}
return -1;
}
void insert(int p){
int i=get(p);
dt[i].emplace(lower_bound(dt[i].begin(),dt[i].end(),p),p);
if(dt[i].size()>th){
dt.emplace(dt.begin()+i+1,dt[i].end()-sz,dt[i].end());
dt[i].erase(dt[i].end()-sz,dt[i].end());
}
}
void erase(int p){
int i=get(p);
dt[i].erase(lower_bound(dt[i].begin(),dt[i].end(),p));
if(dt[i].size()<sz/4){
merge(dt[i].begin(),dt[i].end(),dt[i+1].begin(),dt[i+1].end(),dt[i+1].begin());
dt.erase(dt.begin()+i);
}
}
int kth(int n){
for(auto i:dt){
if(i.size()<=n)
n-=i.size();
else
return i[n];
}
return -1;
}
int clt(int n){
int ans=0;
for(auto i:dt){
if(i.back()<n)
ans+=i.size();
else{
for(auto j:i)
if(j<n)
ans++;
else
break;
}
}
return ans;
}
int pre(int p){
int i=get(p);
auto ps=lower_bound(dt[i].begin(),dt[i].end(),p);
if(ps==dt[i].begin())
return dt[i-1].back();
return *prev(ps);
}
int nex(int p){
int i=get(p);
auto ps=upper_bound(dt[i].begin(),dt[i].end(),p);
if(ps==dt[i].end())
return dt[i+1].front();
return *ps;
}
};
vector<int> lin={INT_MIN,INT_MAX};
vector<var> t;
signed main(){
SK tree=lin;
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;
}
开 O2 20分,不开就 8 分。