咱就是说看不出哪里错了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
inline int read(){
int x = 0,f = 1;char c = getchar();
for(;!isdigit(c);c = getchar())if(c == '-')f = -1;
for(;isdigit(c);c = getchar())x = ( x << 1 ) + ( x << 3 ) + c - '0';
return x * f;
}
int n,tot,nod,root[N * 30];
struct node{
int l,r,siz;
char data;
}tr[N * 30];
#define ls tr[x].l
#define rs tr[x].r
inline void pushup(int x){
tr[x].siz = tr[ls].siz + tr[rs].siz;
}
inline void insert(int &x,int pre,int l,int r,char data){
x = ++tot;
tr[x].l = tr[pre].l;
tr[x].r = tr[pre].r;
tr[x].siz = tr[pre].siz;
tr[x].data = tr[pre].data;
if(l > r)return;
if(l == r){
tr[pre].data = data;
tr[pre].siz = 1;
return;
}
int mid = ( l + r ) >> 1;
if( tr[ls].siz == mid - l + 1 )insert(rs,tr[pre].r,mid + 1,r,data);
else insert(ls,tr[pre].l,l,mid,data);
pushup(x);
}
inline char query(int x,int l,int r,int k){
if(l >= r)return tr[x].data;
int mid = ( l + r ) >> 1;
if( k <= tr[ls].siz )return query(ls,l,mid,k);
else return query(rs,mid + 1,r,k - tr[ls].siz);
}
int main(){
n = read();
for(int i = 1;i <= n;i ++){
int x;
char ch,opt;
opt = getchar();
if(opt == 'T'){
cin >> ch;
nod ++;
insert(root[nod],root[nod - 1],1,n,ch);
}
if(opt == 'U'){
x = read();
nod ++;
root[nod] = root[nod - x - 1];
}
if(opt == 'Q'){
x = read();
cout << query(root[nod],1,n,x) << endl;
}
}
return 0;
}