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) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序 ...
随机推荐
- daisy框架规划
本框架的目的是建立一个标准化的.net core webapi 框架,利用.net core的性能和跨平台,提供高效的restful service(同时开发也会很高效). 主要组层: Daisy.c ...
- ZeroMQ接口函数之 :zmq_proxy – 开始ZMQ内置代理
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-proxy zmq_proxy(3) ØMQ Manual - ØMQ/4.1.0 Nam ...
- MSSQL 跨服器调用存储过程
A库 CREATE PROCEDURE [dbo].[A_P_Test] AS BEGIN SELECT * FROM dbo.A_LoadData END B库 在B中调用A库存储过程 注:是同一 ...
- dedecms 时间标签strftime和MyDate
先说下内容页样式: 日期:{field:pubdate function=strftime('m-d',@me)/} 01-01 日期:{field:pubdate function=strftime ...
- gVim的pathogen
1.安装gVim 1.选择Full模式 2. 在vimfiles 文件夹下,会有许多空文件夹.将它们全删掉. 3.将vim74文件夹下的"autoload"文件夹 剪切 到 vim ...
- 01 LabVIEW的类中各个Scope的范围
范例地址: D:\Program Files (x86)\National Instruments\LabVIEW 2015\examples\Object-Oriented Programming\ ...
- USACO翻译:USACO 2014 MARCH Silver三题
USACO 2014 MARCH 一.题目概览 中文题目名称 农田灌溉 懒牛 牛叫 英文题目名称 irrigation lazy mooomoo 可执行文件名 irrigation lazy mooo ...
- IOS网络第五天 AFN-03-监控网络状态
******* #import "HMViewController.h" #import "AFNetworking.h" @interface HMViewC ...
- 关于malloc函数的动态分配问题
malloc函数动态分配了一个整型的内存空间,让abc都指向刚申请的空间,所以只有最后一个赋值语句的值保留在了空间里 #include<stdio.h> main() { int *a,* ...
- 安卓中級教程(7):annotation中的 public @interface的用法
package com.example.ele_me.util; import java.lang.annotation.Retention; import java.lang.annotation. ...