#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e6+10;
int n;
struct psd //president tree(?
{
struct node
{
int l,r;
int size;
char val;
}t[N<<5];
int rt[N];
int tot;
void update(int &k,int f,char ch,int l,int r)
{
k=++tot;
t[k].l=t[f].l;
t[k].r=t[f].r;
t[k].size=t[f].size;
t[k].val=t[f].val;
if(l==r)
{
t[k].val=ch;
t[k].size=1;
return ;
}
if(t[t[k].l].size==((l+r)>>1)-l+1) update(t[k].r,t[f].r,ch,((l+r)>>1)+1,r);
else update(t[k].l,t[f].l,ch,l,(l+r)>>1);
t[k].size=t[t[k].l].size+t[t[k].r].size;
}
char query(int k,int l,int r,int x)
{
if(l==r) return t[k].val;
if(t[t[k].l].size>=x) return query(t[k].l,l,(l+r)>>1,x);
else return query(t[k].r,((l+r)>>1)+1,r,x-t[t[k].l].size);
}
}tree;
int ver;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
char op,ch;
int back;
scanf(" %c",&op);
if(op=='T')
{
scanf(" %c",&ch);
ver++;
tree.update(tree.rt[ver],tree.rt[ver-1],ch,1,n);
}
else if(op=='U')
{
scanf("%d",&back);
back++;
ver++;
tree.rt[ver]=tree.rt[ver-back-1];
}
else
{
scanf("%d",&back);
back++;
printf("%c\n",tree.query(tree.rt[ver],1,n,back));
}
}
return 0;
}
22分,不知道WA在哪里了
由P1383的代码里加上
back++ 而已
有什么坑点吗?