#include<cstdio> using namespace std; const int M=9999; struct tr{ int l,r,x,size,num,f; }a[M]; int tot=1; void insert(int v,int u){ if(!v)return; if(u>a[v].x) { if(!a[v].r) { a[++tot].x=u; a[tot].f=v; a[tot].size=1; a[v].r=tot; } else insert(a[v].r,u); } else{ if(!a[v].l) { a[++tot].x=u; a[tot].size=1; a[tot].f=v; a[v].l=tot; } else insert(a[v].l,u); } a[v].size=a[a[v].l].size+a[a[v].r].size+1; } /*int ins(int t,int v,int l,int r){ if(!s[l].key) s[t].l=newcode(v); else if(s[l].key>v&&!s[r].key) s[t].r=newcode(v); else if(v<s[l].key){ ins(l,v,s[l].l,s[l].r); } else if(){ ins(s[t].r,v); } s[t].size=s }*/ int getmax(int t){ while(a[t].r!=0){ t=a[t].r; } return t; } int check(int t,int k){ if(a[a[t].l].size==k-1) return a[t].x; if(a[a[t].l].size>k-1) { return check(a[t].l,k); } else{ return check(a[t].r,k-a[a[t].l].size-1); } } int check2(int t,int k,int ans){ if(a[t].x==k){ return ans+a[a[t].l].size; } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); } int check3(int t,int k){ if(a[t].x==k){ return k; } if(a[t].x>k){ if(!a[a[t].l].x)return a[t].x; return check3(a[t].l,k); } if(a[t].x<k){ if(!a[a[t].r].x)return a[t].x; return check3(a[t].r,k); } } /*int check4(int t,int k,int ans){ if(a[t].x==k){ check(); } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); }*/ int n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ int q,y; scanf("%d%d",&q,&y); if(i==1) { a[1].x=y; a[1].size=1; continue; } if(q==1){ insert(1,y); } if(q==2){ } if(q==3) printf("%d\n",check(1,y)); if(q==4) printf("%d\n",check2(1,y,1)); if(q==5){ printf("%d\n",check3(1,y)); } if(q==6) { int k=check2(1,y,1); printf("%d\n",check(1,k-1)); } if(q==7) { int k=check2(1,y,1); printf("%d\n",check(1,k+1)); } } for(int i=1;i<=tot;i++){ // printf("%d \n",a[i].size); } }
#include<cstdio> using namespace std; const int M=9999; struct tr{ int l,r,x,size,num,f; }a[M]; int tot=1; void insert(int v,int u){ if(!v)return; if(u>a[v].x) { if(!a[v].r) { a[++tot].x=u; a[tot].f=v; a[tot].size=1; a[v].r=tot; } else insert(a[v].r,u); } else{ if(!a[v].l) { a[++tot].x=u; a[tot].size=1; a[tot].f=v; a[v].l=tot; } else insert(a[v].l,u); } a[v].size=a[a[v].l].size+a[a[v].r].size+1; } /*int ins(int t,int v,int l,int r){ if(!s[l].key) s[t].l=newcode(v); else if(s[l].key>v&&!s[r].key) s[t].r=newcode(v); else if(v<s[l].key){ ins(l,v,s[l].l,s[l].r); } else if(){ ins(s[t].r,v); } s[t].size=s }*/ int getmax(int t){ while(a[t].r!=0){ t=a[t].r; } return t; } int check(int t,int k){ if(a[a[t].l].size==k-1) return a[t].x; if(a[a[t].l].size>k-1) { return check(a[t].l,k); } else{ return check(a[t].r,k-a[a[t].l].size-1); } } int check2(int t,int k,int ans){ if(a[t].x==k){ return ans+a[a[t].l].size; } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); } int check3(int t,int k){ if(a[t].x==k){ return k; } if(a[t].x>k){ if(!a[a[t].l].x)return a[t].x; return check3(a[t].l,k); } if(a[t].x<k){ if(!a[a[t].r].x)return a[t].x; return check3(a[t].r,k); } } /*int check4(int t,int k,int ans){ if(a[t].x==k){ check(); } if(a[t].x>k){ return check2(a[t].l,k,ans); } else return check2(a[t].r,k,ans+a[a[t].l].size+1); }*/ int n; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ int q,y; scanf("%d%d",&q,&y); if(i==1) { a[1].x=y; a[1].size=1; continue; } if(q==1){ insert(1,y); } if(q==2){ } if(q==3) printf("%d\n",check(1,y)); if(q==4) printf("%d\n",check2(1,y,1)); if(q==5){ printf("%d\n",check3(1,y)); } if(q==6) { int k=check2(1,y,1); printf("%d\n",check(1,k-1)); } if(q==7) { int k=check2(1,y,1); printf("%d\n",check(1,k+1)); } } for(int i=1;i<=tot;i++){ // printf("%d \n",a[i].size); } }
时间: 2024-09-16 12:55:03