记录编号 583182 评测结果 AAAAAAAAAA
题目名称 高级打字机 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 C++ 运行时间 0.621 s
提交时间 2023-10-05 17:40:15 内存使用 145.73 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
long long fa=0,f[1000010][21],tot=0,l[1000010],n,yx=0,d[1000010]={},c2[25];
char t[1000010];
int main()
{
    freopen("type.in","r",stdin);
    freopen("type.out","w",stdout);
    c2[0]=1;
    for(int i=1;i<=20;i++)
    {
        c2[i]=c2[i-1]*2;
    }
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        char a;
        cin>>a;
        if(a=='T'){
            yx++;
            tot++;
            cin>>t[tot];
            l[yx]=tot;
            d[tot]=d[fa]+1;
            f[tot][0]=fa;
            for(int j=1;j<=20;j++)
            {
                f[tot][j]=f[f[tot][j-1]][j-1];
            }
            fa=tot;
        }else if(a=='Q'){
            int x;
            cin>>x;
            long long fa2=fa;
            for(int j=20;j>=0;j--)
            {
                if(d[fa2]-c2[j]>=x)
                {
                    fa2=f[fa2][j];
                }
                if(d[fa2]==x)
                {
                    cout<<t[fa2]<<endl;
                    break;
                }
            }
        }else{
            int x;
            cin>>x;
            yx++;
            l[yx]=l[yx-x-1];
            fa=l[yx];
        }
    }
    return 0;
}