比赛 20231005 评测结果 C
题目名称 高级打字机 最终得分 0
用户昵称 超人 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2023-10-05 11:40:19
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n;
struct type
{
    int l,r;
    char ch;
}gj[N<<2];
int trie[N],idx,pre[N],ver;
int dzj(int l,int r)
{
    if(l==r) return idx;
    int middle=l+r>>1;
    gj[idx].l=dzj(l,middle);
    return idx;
}
int update(int p,int l,int r,int k,char ch)
{
    gj[idx]=gj[idx];
    if(l==r)
    {
        gj[idx].ch=ch;
    }
    else
    {
        int middle=l+r>>1;
        if(k<=middle) gj[idx].l=update(gj[idx].l,l,middle,k,ch);
        else gj[idx].r=update(gj[idx].l,middle+1,r,k,ch);
    }
    return q;
}
char init(int p,int l,int r,int k)
{
    if(l==r) return gj[p].ch;
    int middle=l+r>>1;
    if(k<=middle) return init(gj[p].l,l,middle,k);
    else return init(gj[p].r,middle+1,r,k);
}
int main()
{
    freopen("type.in","r",stdin);
    freopen("type.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        char op,ch;
        int x;
        cin>>op;
        if(op=='T')
        {
            cin>>ch;
            ver++;
            pre[ver]=pre[ver-1]+1;
            trie[ver]=update(trie[ver-1],1,n,pre[ver],ch);
        }
        else
        {
            cin>>x;
            if(op=='U')
            {
                ver++;
                trie[ver]=trie[ver-x-1];
                pre[ver]=pre[ver-x-1];
            }
            else cout<<init(trie[ver],1,n,x)<<endl;
        }
    }
}