洛谷P1383「IOI 2012」《高级打字机》
十一月 02, 2019
3209
IOI 也出板子题?
题目描述
早苗入手了最新的高级打字机。最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧。
请为这种高级打字机设计一个程序,支持如下3种操作:
1.T x:在文章末尾打下一个小写字母x。(type操作)
2.U x:撤销最后的x次修改操作。(Undo操作)
(注意Query操作并不算修改操作)
3.Q x:询问当前文章中第x个字母并输出。(Query操作)
文章一开始可以视为空串。
输入格式
第1行:一个整数n,表示操作数量。
以下n行,每行一个命令。保证输入的命令合法。
输出格式
每行输出一个字母,表示Query操作的答案。
输入输出样例
输入 #1
1 |
|
输出 #1
1 |
|
说明/提示
【数据范围】
对于40%的数据 n<=200;
对于100%的数据 n<=100000;保证Undo操作不会撤销Undo操作。
<高级挑战>
对于200%的数据 n<=100000;Undo操作可以撤销Undo操作。
<IOI挑战>
必须使用在线算法完成该题。
解析
普通数据
就是个模拟。。。没啥好讲的
代码之后会给
IOI 挑战
原题为 IOI2012 Scrivener PDF 链接
这不就是个可持久化数组板子吗。。。 就这还 IOI 题?
算了还是好好说一下三种操作吧
- 插入操作
提前开好一个大小为 n 的可持久化数组,每次插入的时候建一个新的版本,把上个版本的长度 + 1 处字符修改了就好 - 撤销操作
直接新开一个版本,把版本信息(根节点和长度)修改成撤销到的那个版本就行了 - 查询操作
这个就是模板操作了,不再赘述
什么?听说你不会可持久化数据结构?不久之后我会专门开一篇讲的
代码实现
普通数据
1 |
|
IOI 挑战
1 |
|
- 本文作者:Handwer STD
- 本文链接:https://blog.handwer-std.top/2019-11-02/Luogu-P1383/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!