(luogu P1383)高级打字机
高级打字机
题目链接 https://www.luogu.org/problemnew/show/P1383
背景
无聊中。。
随便在luogu上rand到了一道题
从此走上不归路
主席树是我暑假的时候学的
现在真的忘得精光
花了一个小时从零开始学
看来之前学过的东西还是要好好巩固啊
思路
首先50分超级好拿
纯粹的模拟就可以了
首先看到‘撤销’联想到‘历史版本’,于是就想到可以用主席树来支持这种撤销。
那主席树应该维护什么呢?
当然是维护输入的字符序列
由于一次更改肯定是基于上一次更改
所以和上一次有很多点是可以共用的
所以可以用可持久化数据结构
不过不同的是
由于序列的长度时增时减
所以我们需要一开始就把空间开足
然后这道题的读入也是一个坑点
YCB大佬亲自指导本菜鸡改读入(我还不会%c)教了我一种类似读入优化的读入一个字符的方法,比%c快(再也不用%c了)。
代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#define rg register int
#define ll long long
#define RG register
#define il inline
using namespace std;
il int gi()
{
rg x=0,o=0;RG char ch=getchar();
while(ch!='-'&&(ch<'0'||'9'<ch)) ch=getchar();
if(ch=='-') o=1,ch=getchar();
while('0'<=ch&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return o?-x:x;
}
char ch,opt;int n;
#define SZ 100010
struct Tree { int l,r;char ch; }tr[SZ*25];
#define lson tr[rt].l
#define rson tr[rt].r
int Ed[SZ],tot,cnt;
// 主席树存什么? 每一个点的 字符
// 为什么不需要建树? 因为一开始是空的所以不需要建树,肯定不会跟空的共用节点
void update(int &rt,rg last,rg l,rg r,rg pos)
{
rt=++tot;
if(l==r) {tr[rt].ch=ch;return;}
lson=tr[last].l;rson=tr[last].r;
rg mid=l+r>>1;
if(pos<=mid) update(lson,tr[last].l,l,mid,pos);
else update(rson,tr[last].r,mid+1,r,pos);
}
char query(rg rt,rg l,rg r,rg pos)
{
if(l==r) return tr[rt].ch;
rg mid=l+r>>1;
if(pos<=mid) return query(lson,l,mid,pos);
else return query(rson,mid+1,r,pos);
}
int len[SZ];
int main()
{
n=gi();
while(n--)
{
opt=getchar();
while(opt!='T' && opt!='U' &&opt!='Q')opt = getchar();
if(opt=='T')
{
ch=getchar();
while(!('a'<=ch&&ch<='z')) ch=getchar(); // 把空格吃掉
len[++cnt]=len[cnt-1]+1;
update(Ed[cnt],Ed[cnt-1],1,SZ,len[cnt]);
}
if(opt=='U')
{
rg x=gi();
len[++cnt]=len[cnt-x-1];
Ed[cnt]=Ed[cnt-x-1]; // 还要 -1 想想为什么
}
if(opt=='Q')
{
rg x=gi();
printf("%c\n",query(Ed[cnt],1,SZ,x));
}
}
return 0;
}
(luogu P1383)高级打字机的更多相关文章
- 「Luogu P1383 高级打字机」
一道非常基础的可持久化数据结构题. 前置芝士 可持久化线段树:实现的方法主要是主席树. 具体做法 这个基本就是一个模板题了,记录一下每一个版本的字符串的长度,在修改的时候就只要在上一个版本后面加上一个 ...
- 2021.07.02 P1383 高级打字机题解(可持久化平衡树)
2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...
- P1383 高级打字机
P1383 高级打字机 主席树 一发主席树解决. 插入操作十分显然. 撤销操作复制前面的版本就行. 询问操作十分显然. #include<iostream> #include<cst ...
- 洛谷 P1383 高级打字机==codevs 3333 高级打字机
P1383 高级打字机 18通过 118提交 题目提供者yeszy 标签倍增图论高级数据结构福建省历届夏令营 难度省选/NOI- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 早苗入手 ...
- 【洛谷P1383 高级打字机】
题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(t ...
- 【Luogu】P1383高级打字机
可持久化线段树模板题之一. 权当温习主席树模板 #include<cstdio> #include<cstdlib> #include<cctype> #defin ...
- 洛谷 P1383 codevs 3333 高级打字机
题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(t ...
- C++之路进阶——codevs3333(高级打字机)
3333 高级打字机 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 早苗入手了最新的高级打字机.最新款自然有着与 ...
- [模拟赛] T1 高级打字机
Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小 ...
随机推荐
- Qt滑动条设计与实现
没有找到Qt的滑动条控件,所以自己写了一个,能够实现亮度调节.音量调节等功能. 效果如下图: 主要设计思路: 有些调节功能如对比度是有负值的,所以需要能对滑动条的数值范围进行设置,不局限于0~100 ...
- 阿里云学习之API网关
注:此处仅供api的创建做一个补充参考,API网关的优缺点及创建过程中的参数详情,请参考阿里云开放文档:https://helpcdn.aliyun.com/document_detail/29478 ...
- Maven下的SpringMVC MyBatis
从头开始采用Maven管理,Spring.MyBatis.Tomcat. 在配置过程中SQL Server的Jar老是加载不了,解决方案参考前一篇博文. eclipse中已经自带了Maven的插件所以 ...
- 在CentOS下安装crontab服务
1. 确认crontab是否安装: 执行 crontab 命令如果报 command not found,就表明没有安装 2. 安装 crontab 执行 yum install -y vixie-c ...
- 手把手教你用.NET Core写爬虫
写在前面 自从上一个项目58HouseSearch从.NET迁移到.NET core之后,磕磕碰碰磨蹭了一个月才正式上线到新版本. 然后最近又开了个新坑,搞了个Dy2018Crawler用来爬dy20 ...
- hihoCoder 1036 Trie图 AC自动机
题意:给定n个模式串和一个文本串,判断文本中是否存在模式串. 思路:套模板即可. AC代码 #include <cstdio> #include <cmath> #includ ...
- hihoCoder 1513 : 小Hi的烦恼 位运算好题
思路:考虑第i个同学,第一门课排名比他靠前的同学的集合是S1,第二门课是S2...第五门课是S5,很明显比这个同学每门课程都优秀的同学就是S1&S2&S3&S4&S5, ...
- 电脑中dll文件丢失怎么恢复?
DLL文件是Windows系统中的动态链接文件,我们在运行程序时都必须链接到dll文件,如果缺少了则无法正常运行,相信大家都会遇到dll文件缺失的情况,那么电脑中dll文件丢失怎么恢复?下面装机之家分 ...
- 阻止微信浏览器/QQ浏览器长按弹框“在浏览器打开”
这个弹框实际上等同于PC环境下的鼠标右键的弹框,因此只要禁止页面的弹框事件就能完美屏蔽该弹框对我们功能带来的影响.程序代码如下: document.oncontextmenu=function(e){ ...
- CEPH RGW集群和bucket的zone group 不一致导致的404异常解决 及 使用radosgw-admin metadata 命令设置bucket metadata 的方法
问题现象: 最近在研究zonegroup的配置操作,发现在配置zonegroup后修改了default zone,导致访问对象报404错误. 问题原因: rgw 日志 报异常'request fo ...