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) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...
随机推荐
- C# 与 C++ 数据类型比较及结构体转换
引自:http://www.blogjava.net/heting/archive/2010/03/20/315998.html C++ C# =============== ...
- Codeforces Round #256 (Div. 2)
A - Rewards 水题,把a累加,然后向上取整(double)a/5,把b累加,然后向上取整(double)b/10,然后判断a+b是不是大于n即可 #include <iostream& ...
- 2016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:5分钟安装 30分钟入门和浏览常用命令
14:59 2016/1/112016最新 wamp2.5+windows 10安装CoedSgniffer代码格式检查:注意问题:1.手动安装2.5.0和pear安装方式都成功但是执行时无任何反映, ...
- bzoj3212 pku3468 A Simple Problem with Integers
一个有初值的数列.区间加.区间查 用线段树直接水过 然而并没有1A,主要是做题太快没看规模结果没注意线段树要用longlong建 卧槽怎么可以这么坑爹,害得我看见wa心慌了,还以为连线段树都要跪 一开 ...
- Python笔记-第一天
1.Python的输出print函数要把输出的字符串用单引号或者双引号括起来,但是不能混用. 比如print('hello,world')和print("hello,world") ...
- gitlab 创建SSH Keys 报500错
gitlab 创建SSH Keys 报500错 看了一下日志 root@322323:/home/git/gitlab/log# cat production.log Errno::ENOMEM (C ...
- java 编码
编码和解码:无论是解码还是编码都是针对码表来讲的. 编码:将能看懂得字符变为我们看不懂的码值. 字符串--->字节数组 String类的getBytes() 方法进行编码,将字符串,转为对映的二 ...
- python 基础
Python基础 三元运算(三目运算),是对简单的条件语句的缩写. # 书写格式 result = 值1 if 条件 else 值2 # 如果条件成立,那么将 “值1” 赋值给result变量,否则, ...
- 建设移动端web开发会涉及到的meta标签
<meta name="format-detection" content="telephone=no"> <meta name=" ...
- javascript学习之运动框架
模仿新浪博客首页的,最新评论: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"&g ...