此处代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int v,l,r,s,size;
}a[100005];
const int m=2147483647;
int q,x,n,sum;
inline int read(){
char c;
bool flag;
int k;
while(((c=getchar())<'0'||c>'9')&&c!='-');
if(c=='-') flag=true,k=getchar()-'0';
else flag=false,k=c-'0';
while((c=getchar())>='0'&&c<='9') k=k*10+c-'0';
if(flag) return -k; else return k;
}
inline void write(int k){
if(k<0) putchar('-'),k=-k;
if(k>=0&&k<10){
putchar(k+'0');
return;
}
write(k/10);
putchar(k%10+'0');
}
void in(int root){
++a[root].size;
if(a[root].v==x)
++a[root].s;
else if(a[root].v>x)
if(a[root].l==0) ++sum,a[root].l=sum,a[sum].v=x,a[sum].size=a[sum].s=1;
else in(a[root].l);
else if(a[root].v<x)
if(a[root].r==0) ++sum,a[root].r=sum,a[sum].v=x,a[sum].size=a[sum].s=1;
else in(a[root].r);
}
int get_num(int root){
if(a[root].v==x) return a[a[root].l].size+1;
else if(a[root].v<x) return get_num(a[root].r)+a[a[root].l].size+a[root].s;
else if(a[root].v>x) return get_num(a[root].l);
else return m;
}
int get_val(int root,int th){
if(a[a[root].l].size>=th) return get_val(a[root].l,th);
else if(a[a[root].l].size+a[root].s>=th) return a[root].v;
else if(a[a[root].l].size+a[root].s+a[a[root].r].size>=th) return get_val(a[root].r,th-a[a[root].l].size-a[root].s);
else return m;
}
int get_prev(int root,int ans){
if(a[root].v>=x)
if(a[root].l==0) return ans;
else return get_prev(a[root].l,ans);
else if(a[root].r==0) return a[root].v<x?a[root].v:ans;
else if(a[root].s==0) return get_prev(a[root].r,ans);
else return get_prev(a[root].r,a[root].v);
}
int get_next(int root,int ans){
if(a[root].v<=x)
if(a[root].r==0) return ans;
else return get_next(a[root].r,ans);
else if(a[root].l==0) return a[root].v>x?a[root].v:ans;
else if(a[root].s==0) return get_next(a[root].l,ans);
else return get_next(a[root].l,a[root].v);
}
int main(){
q=read();
while(q--){
n=read(),x=read();
if(n==5) if(sum==0) sum=1,a[1].size=a[1].s=1,a[1].v=x; else in(1);
else if(n==1) write(get_num(1)),putchar('\n');
else if(n==2) write(get_val(1,x)),putchar('\n');
else if(n==3) write(get_prev(1,-m)),putchar('\n');
else if(n==4) write(get_next(1,m)),putchar('\n');
}
return 0;
}