比赛 |
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;
}
}
}