C++之路进阶——codevs3333(高级打字机)
3333 高级打字机
早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。
请为这种高级打字机设计一个程序,支持如下3种操作:
1.T x:在文章末尾打下一个小写字母x。(type操作)
2.U x:撤销最后的x次修改操作。(Undo操作)
(注意Query操作并不算修改操作)
3.Q x:询问当前文章中第x个字母并输出。(Query操作)
文章一开始可以视为空串。
第1行:一个整数n,表示操作数量。
以下n行,每行一个命令。保证输入的命令合法。
每行输出一个字母,表示Query操作的答案。
7
T a
T b
T c
Q 2
U 2
T c
Q 2
b
c
对于40%的数据 n<=200;
对于50%的数据 n<=100000;保证Undo操作不会撤销Undo操作。
<高级挑战>
对于100%的数据 n<=100000;Undo操作可以撤销Undo操作。
题解:
可持久化线段树维护新加入的字符。遇到撤销操作直接转到root[cnt-x-1]的线段树上。
#include<cstdio>
#include<iostream>
#include<algorithm>
#define maxn 2000000 using namespace std; int root[maxn],ls[maxn],rs[maxn],len[maxn],n,x,cnt,tot; char S[maxn<<],s[],ch[]; void update(int &y,int x,int l,int r,int pos,char c)
{
y=++tot;
if (l==r) {S[y]=c;return;}
ls[y]=ls[x],rs[y]=rs[x];
int mid=(l+r)>>;
if (pos<=mid) update(ls[y],ls[x],l,mid,pos,c);
else update(rs[y],rs[x],mid+,r,pos,c);
} char query(int rt,int l,int r,int pos)
{
if (l==r) {return S[rt];}
int mid=(l+r)>>;
if (pos<=mid) return query(ls[rt],l,mid,pos);
if (pos>mid) return query(rs[rt],mid+,r,pos);
} int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%s",s);
if (s[]=='T')
{
cnt++;
len[cnt]=len[cnt-]+;
scanf("%s",ch);
update(root[cnt],root[cnt-],,,len[cnt],ch[]);
}
if (s[]=='U')
{
scanf("%d",&x);
cnt++;
root[cnt]=root[cnt-x-];
len[cnt]=len[cnt-x-];
}
if (s[]=='Q')
{
scanf("%d",&x);
cout<<query(root[cnt],,,x)<<endl;
}
}
return ;
}
C++之路进阶——codevs3333(高级打字机)的更多相关文章
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- 山东如意路嘉纳高级定制西装品牌惊艳亮相intertextile面料展 - 服装资讯中心 - 华衣网
山东如意路嘉纳高级定制西装品牌惊艳亮相intertextile面料展 - 服装资讯中心 - 华衣网 山东如意路嘉纳高级定制西装品牌惊艳亮相intertextile面料展
- (luogu P1383)高级打字机
高级打字机 题目链接 https://www.luogu.org/problemnew/show/P1383 背景 无聊中.. 随便在luogu上rand到了一道题 从此走上不归路 主席树是我暑假的时 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
- P1383 高级打字机
P1383 高级打字机 主席树 一发主席树解决. 插入操作十分显然. 撤销操作复制前面的版本就行. 询问操作十分显然. #include<iostream> #include<cst ...
- codevs 3333 高级打字机
3333 高级打字机 题目描述 Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作 ...
- NOIP模拟赛 高级打字机
[题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x. ...
- 洛谷 P1383 高级打字机==codevs 3333 高级打字机
P1383 高级打字机 18通过 118提交 题目提供者yeszy 标签倍增图论高级数据结构福建省历届夏令营 难度省选/NOI- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 早苗入手 ...
- 模拟赛 Problem 1 高级打字机(type.cpp/c/pas)
Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...
随机推荐
- vs发布的程序不依赖运行时库msvcp100.dll
[摘要:msvcr100.dll:MS Visual C Runtime 100 msvcp100.dll:MS Visual CPp 100 vs建立的工程,运转时库的范例有MD(MDd)战MT ...
- zeppelin-0.6.0安装配置
从http://zeppelin.apache.org/download.html 下载 zeppelin-0.6.0-bin-all.tgz 解压 修改zeppelin-site.xml,配置端口 ...
- 2016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:
14:59 2016/1/112016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:注意问题:1.手动安装2.5.0和pear安装方式都成功但是执行时无任何反映, ...
- 不注册Activex 直接调用它
此处的Activex是ATL方式的. [ComVisible(false)] [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnk ...
- .NET简谈接口
自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程.面向接口编程.面向组件编程等等:这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合. 今天我要简谈的是面向对象里面非常重 ...
- Hibernate学习笔记3
---恢复内容开始--- 一.hibernate如何转化jdbc代码实例[通过hibernate构建jdbc后往数据库传对象] import java.sql.Connection;import ja ...
- php排序
关于order by排序:单条件排序:order by id(按照id排序默认从小到大) order by id desc(按照id排序从大到小) 多条件排序:order by date,id(先按照 ...
- git revert和git reset的区别
git revert 是撤销某次操作,此次操作之前的commit都会被保留 git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区 具体一个例子,假设有三个commit, git s ...
- HTML/Elements/base
https://www.w3.org/wiki/HTML/Elements/base HTML/Elements/base < HTML | Elements List of Elemen ...
- ajax返回json在 IE下,提示打开或保存的解决方法
Content-type要设置成 text/html 我是用的mvc jquery.form.js 提交的表单. 返回json响应数据. 结果在ie下提示打开或保存,查看保存的内容.就是我返回的jso ...