使用了pbds的平衡树:
#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_cxx;
using namespace __gnu_pbds;
int n,x,op,tr_clock;
tree<pair<int,int> ,null_type,less<pair<int,int> >,rb_tree_tag,tree_order_statistics_node_update> tr;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d%d",&op,&x);
tr_clock++;
if(op==1){
cout<<tr.order_of_key(make_pair(x,0))+1<<'\n';
}
else if(op==2){
auto v=*tr.find_by_order(x-1);
cout<<v.first<<'\n';
}
else if(op==3){
auto it=tr.upper_bound(make_pair(x,0));
--it;
auto v=*it;
if(v.first==0) cout<<"−2147483647\n";
else cout<<v.first<<'\n';
}
else if(op==4){
auto v=*tr.upper_bound(make_pair(x,1000005));
if(v.first==0) cout<<"2147483647\n";
else cout<<v.first<<'\n';
}
else if(op==5){
tr.insert(make_pair(x,tr_clock));
}
}
return 0;
}