#include<iostream>
#define ri register int
using namespace std;
const int N=1e4+100,MAX=2147483647;
int q,op,x,c[N],tot,s[N],ok,f[N];
void find(ri rt,ri a){
if(f[rt]==MAX) cout<<MAX<<endl;
else if(s[f[rt]]==a) find(f[rt],a);
else cout<<f[rt]<<endl;
}
struct wyx{
int left,right;
}nodes[N];
inline void build(ri rt,ri a){
if(tot==1){
return;
}
if(a<s[rt]){
if(nodes[rt].left==MAX){
nodes[rt].left=tot;
c[rt]++;
f[nodes[rt].left]=rt;
return;
}
build(nodes[rt].left,a);
c[rt]++;
}else{
if(nodes[rt].right==MAX){
nodes[rt].right=tot;
c[tot]=c[rt]+1;
f[nodes[rt].right]=rt;
return;
}
c[nodes[rt].right]=c[rt]+1;
build(nodes[rt].right,a);
}
return;
}
inline void serch_c(ri rt,ri a){
if(a<s[rt]){
if(nodes[rt].left==MAX){
cout<<c[rt]+1<<endl;
return;
}
serch_c(nodes[rt].left,a);
}else if(a==s[rt]){
cout<<c[rt]+1<<endl;
}else{
if(nodes[rt].right==MAX){
cout<<c[rt]+2<<endl;
return;
}
c[nodes[rt].right]=c[rt]+1;
serch_c(nodes[rt].right,a);
}
return;
}
inline void serchc_(ri rt,ri a){
if(a<c[rt]+1){
serchc_(nodes[rt].left,a);
}else if(a==c[rt]+1){
cout<<s[rt]<<endl;
}else{
int p=nodes[rt].right;
if(nodes[p].left!=MAX)c[nodes[rt].right]=c[rt]+c[nodes[p].left]+1;
else c[nodes[rt].right]=c[rt]+1;
serchc_(nodes[rt].right,a);
}
return;
}
inline void serch_l(ri rt,ri a){
if(a<s[rt]){
if(nodes[rt].left==MAX){
cout<<-MAX<<endl;
return;
}
serch_l(nodes[rt].left,a);
}else if(a==s[rt]){
ok=true;
if(nodes[rt].left==MAX){
if(f[rt]==MAX) cout<<-MAX<<endl;
else cout<<s[f[rt]]<<endl;
return;
}
serch_l(nodes[rt].left,a);
}else{
if(nodes[rt].right==MAX){
if(ok==false) cout<<-MAX<<endl;
else cout<<s[rt]<<endl;
return;
}
serch_l(nodes[rt].right,a);
}
return;
}
inline void serch_r(ri rt,ri a){
if(a<s[rt]){
if(nodes[rt].left==MAX){
if(ok==false) cout<<MAX<<endl;
else cout<<s[rt]<<endl;
return;
}
serch_r(nodes[rt].left,a);
}else if(a==s[rt]){
ok=true;
if(nodes[rt].right==MAX){
if(f[rt]==MAX) cout<<MAX<<endl;
else if(s[f[rt]]==a) find(f[rt],a);
else cout<<s[f[rt]]<<endl;
return;
}
serch_r(nodes[rt].right,a);
}else{
if(nodes[rt].right==MAX){
cout<<MAX<<endl;
return;
}
serch_r(nodes[rt].right,a);
}
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
for(ri i=1;i<=N-99;i++){
nodes[i].left=MAX;
nodes[i].right=MAX;
f[i]=MAX;
}
cin>>q;
while(q--){
cin>>op>>x;
if(op==1){
serch_c(1,x);
}else if(op==2){
serchc_(1,x);
}else if(op==3){
ok=false;
serch_l(1,x);
}else if(op==4){
ok=false;
serch_r(1,x);
}else{
s[++tot]=x;
build(1,x);
}
}
return 0;
}
初步判定可能是serchc_()函数的问题(求排名为x的数) (数组改为map仍然RE)