# include # include # include using namespace std; # define N 100005 int arr[20][N]; struct node { int s,e,layer; int c; }st[4*N]; int q[500000][4],c; int remap[N],position[N]; map refer; void init(int s,int e,int layer,int pos=1) { st[pos].s=s;st[pos].e=e; st[pos].layer=layer; st[pos].c=st[pos].s; if(s!=e) init(s,(s+e)/2,layer+1,pos<<1),init((s+e)/2+1,e,layer+1,(pos<<1)+1); } void insert(int value,int pos=1) { if(st[pos].s==st[pos].e) arr[st[pos].layer][st[pos].c++]=value; else { if(value<=(st[pos].s+st[pos].e)/2) { arr[st[pos].layer][st[pos].c]=(st[pos].c==st[pos].s?0:arr[st[pos].layer][st[pos].c-1])+1; st[pos].c++; insert(value,pos<<1); } else { arr[st[pos].layer][st[pos].c]=(st[pos].c==st[pos].s?0:arr[st[pos].layer][st[pos].c-1]); st[pos].c++; insert(value,(pos<<1)+1); } } } int q1(int s,int t,int k,int pos=1) { if(st[pos].s==st[pos].e) return remap[arr[st[pos].layer][st[pos].s]]; else { if(arr[st[pos].layer][t]-(s==st[pos].s?0:arr[st[pos].layer][s-1])>=k)//left return q1(st[pos].s+(s==st[pos].s?0:arr[st[pos].layer][s-1]),st[pos].s+arr[st[pos].layer][t]-1,k,pos<<1); else//right { k-=arr[st[pos].layer][t]-(s==st[pos].s?0:arr[st[pos].layer][s-1]); return q1((st[pos].s+st[pos].e)/2+1+s-1-st[pos].s+1-(s==st[pos].s?0:arr[st[pos].layer][s-1]),(st[pos].s+st[pos].e)/2+1+t-st[pos].s+1-arr[st[pos].layer][t]-1,k,(pos<<1)+1); } } } int q2(int s,int pos=1) { if(st[pos].s==st[pos].e) return 1; else if(arr[st[pos].layer][s]-(s==st[pos].s?0:arr[st[pos].layer][s-1])) return q2(st[pos].s+arr[st[pos].layer][s]-1,pos<<1); else return (st[pos].c==st[pos].s?0:arr[st[pos].layer][st[pos].c-1])+q2((st[pos].s+st[pos].e)/2+1+s-st[pos].s+1-arr[st[pos].layer][s]-1,(pos<<1)+1); } int q3(int k,int pos=1) { if(st[pos].s==st[pos].e) return remap[arr[st[pos].layer][st[pos].s]]; else if(k<=(st[pos].c==st[pos].s?0:arr[st[pos].layer][st[pos].c-1])) return q3(k,pos<<1); else return q3(k-(st[pos].s==st[pos].c?0:arr[st[pos].layer][st[pos].c-1]),(pos<<1)+1); } int main() { int n,test=1; while(scanf("%d",&n)!=EOF) { refer.clear();c=1; memset(arr,0,sizeof(arr)); for(int i=0;i::iterator i=refer.begin();i!=refer.end();i++) remap[c]=i->first,i->second=c++; init(1,c-1,0); long long t[4]={0,0,0,0}; int now=1; for(int i=0;i