记录编号 583184 评测结果 AAAAAAAAAA
题目名称 高级打字机 最终得分 100
用户昵称 Gravatar宇战 是否通过 通过
代码语言 C++ 运行时间 0.669 s
提交时间 2023-10-05 17:48:19 内存使用 193.80 MiB
显示代码纯文本
#include <bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    struct node{
        int l,r;
        char c;
    }t[N*20];
    int n,tot,root[N],cnt,len[N];
    int build(int l,int r){
        int p=++tot;
        if(l==r)return p;
        int mid=(l+r)>>1;
        t[p].l=build(l,mid);
        t[p].r=build(mid+1,r);
        return p;
    }
    int increase(int p,int l,int r,int x,char ch){
        int q=++tot;
        t[q]=t[p];
        if(l==r){
            t[q].c=ch;
        }else{
            int mid=(l+r)>>1;
            if(x<=mid){
                t[q].l=increase(t[q].l,l,mid,x,ch);
            }else{
                t[q].r=increase(t[q].r,mid+1,r,x,ch);
            }
        }
        return q;
    }
    char ask(int p,int l,int r,int x){
        if(l==r)return t[p].c;
        int mid=(l+r)>>1;
        if(x<=mid)return ask(t[p].l,l,mid,x);
        else return ask(t[p].r,mid+1,r,x);
    }
    int main(){
    freopen("type.in","r",stdin); 
    freopen("type.out","w",stdout); 
      cin>>n;
      build(1,n);
      for(int i=1;i<=n;i++){
          char x;
          cin>>x;
          if(x=='T'){
              char y;
              cin>>y;
              cnt++;
              len[cnt]=len[cnt-1]+1;
              root[cnt]=increase(root[cnt-1],1,n,len[cnt],y);
          }else if(x=='U'){
              int o;
              cin>>o;
              cnt++;
              root[cnt]=root[cnt-o-1];
              len[cnt]=len[cnt-o-1];  
              
          }else{
              int op;
              cin>>op;
              cout<<ask(root[cnt],1,n,op)<<endl;
          }
      }
       return 0;      
    }