样例可过,但全wa
#include<bits/stdc++.h>
#define M 1000005
using namespace std;
char opt,sum[M<<5];
int last,cnt=0,lon,siz[M<<5],N,ll[M<<5],rr[M<<5],tt[M<<5];
int update(int nex,int l,int r,char pos)
{
// cout<<l<<"@"<<r<<endl;
int rt=++cnt;
ll[rt]=ll[nex];
rr[rt]=rr[nex];
siz[rt]=siz[nex];
sum[rt]=sum[nex];
if(l<r)
{
int mid=l+r>>1;
if(siz[ll[rt]]!=mid-l+1) ll[rt]=update(ll[nex],l,mid,pos);
else rr[rt]=update(rr[nex],mid+1,r,pos);
siz[rt]=siz[ll[rt]]+siz[rr[rt]];
}
if(l==r)
{
sum[rt]=pos;
siz[rt]=1;
}
// t[rt]=t[ll[rt]]+t[rr[rt]];
return rt;
}
char find(int nex,int l,int r,int pos)
{
if(l==r) {return sum[nex];}
else
{
int mid=(l+r)/2;
// cout<<t[ll[nex]];
if(pos<=siz[ll[nex]]) return find(ll[nex],l,mid,pos);
else return find(rr[nex],mid+1,r,pos-ll[nex]);
}
}
int main()
{
cin>>N;
for(int i=1;i<=N;i++)
{
cin>>opt;
if(opt=='T')
{
char x;
cin>>x;
++lon;
tt[lon]=update(tt[lon-1],1,N,x);
// cout<<tt[lon-1]<<" "<<N<<" "<<x<<endl;
}
if(opt=='U')
{
int x;
cin>>x;
++lon;
tt[lon]=tt[lon-x-1];
}
if(opt=='Q')
{
int x;
cin>>x;
cout<<find(tt[lon],1,N,x)<<endl;
}
// cout<<tt[lon];
}
return 0;
}
/*
7
T a
T b
T c
Q 2
U 2
T c
Q 2
*/
// Q p
/*
13
T A
T Q
T p
T y
Q 2
U 2
U 2
Q 3
T A
T A
U 3
U 4
Q 2
*/