首页 > 代码库 > [?]

[?]

技术分享

 

 1 #include<stdio.h> 2 #include<cstring> 3 #define go(i,a,b) for(int i=a;i<=b;i++) 4 const int N=100003;struct Chair_Man_Tree{int l,r,word;}t[N*10]; 5 int q,Root[N],sz,rig[N],mid; 6 void insert(int& u,int L,int R,int pos,char w) 7 { 8     t[++sz]=t[u];u=sz;if(L==R){t[u].word=w;return;}mid=L+R>>1; 9     pos>mid?insert(t[u].r,mid+1,R,pos,w):insert(t[u].l,L,mid,pos,w);10 }11 void find(int u,int L,int R,int pos)12 {13     if(L==R){printf("%c\n",t[u].word);return;}mid=L+R>>1;14     pos>mid?find(t[u].r,mid+1,R,pos):find(t[u].l,L,mid,pos);15 }16 int main()17 {18     scanf("%d",&q);int now=0,i=0;go(I,1,q)19     {20         char c1,c2;int j;scanf(" %c",&c1);21         if(c1==T)i++,scanf(" %c",&c2),Root[i]=Root[i-1],insert(Root[i],1,N,++now,c2),rig[i]=now;22         if(c1==U)i++,scanf("%d",&j),j=i-j-1,Root[i]=Root[j],now=rig[i]=rig[j];23         if(c1==Q)scanf("%d",&j),find(Root[i],1,N,j);24     }25     return 0;26 }//Paul_Guderian

 

[?]