#include<bits/stdc++.h>
using namespace std;
const int N = 1e7 + 1e6;
int n, tot, root[N], q, len[N], siz = 1;
struct node{
int ls, rs;
}t[N << 4];
char s[N];
int build(int l, int r) {
int rt = ++tot;
if(l < r) {
int mid = (l + r) >> 1;
t[rt].ls = build(l, mid);
t[rt].rs = build(mid + 1, r);
}
return rt;
}
int update(int pre, int l, int r, int pos, char c) {
int rt = ++tot;
t[rt].ls = t[pre].ls, t[rt].rs = t[pre].rs;
if(l == r) {
s[rt] = c;
return rt;
}
int mid = (l + r) >> 1;
if(pos <= mid) t[rt].ls = update(t[rt].ls, l, mid, pos, c);
else t[rt].rs = update(t[rt].rs, mid + 1, r, pos, c);
return rt;
}
int query(int p, int l, int r, int pos) {
if(l == r) return s[p];
int mid = (l + r) >> 1;
if(pos <= mid) return query(t[p].ls, l, mid, pos);
else return query(t[p].rs, mid + 1, r, pos);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> q;
n = q;
root[0] = build(1, n);
while(q--) {
char opt;
cin >> opt;
if(opt == 'T') {
char c;
cin >> c;
siz++;
len[siz] = len[siz - 1] + 1;
root[siz] = update(root[siz - 1], 1, n, len[siz], c);
}
else if(opt == 'U') {
int x;
cin >> x;
siz++;
len[siz] = len[siz - x - 1];
root[siz] = root[siz - x - 1];
}
else {
int x;
cin >> x;
x++;
cout << (char)query(root[siz], 1, n, x) << '\n';
}
}
}
如题, 蒟蒻求各位大佬帮帮忙