#P3919. 【模板】可持久化线段树 1(可持久化数组)
【模板】可持久化线段树 1(可持久化数组)
题目背景
UPDATE : 最后一个点时间空间已经放大
2021.9.18 增添一组 hack 数据 by @panyf
标题即题意
有了可持久化数组,便可以实现很多衍生的可持久化功能(例如:可持久化并查集)
题目描述
如题,你需要维护这样的一个长度为 的数组,支持如下两种操作:
-
在某个历史版本上修改某一个位置上的值。
-
访问某个历史版本上的某一位置的值。
此外,每进行一次操作,就会生成一个新的版本。版本编号即为当前操作的编号(从 开始编号,版本 表示初始状态数组)。
对于操作 ,即为生成一个完全一样的版本,不作任何改动。即,询问生成的版本是询问所访问的那个版本的复制。
输入格式
输入的第一行包含两个正整数 ,分别表示数组的长度和操作的个数。
第二行包含 个整数,依次为初始状态下数组各位的值(依次为 ,)。
接下来 行每行包含 或 个整数,代表两种操作之一(设当前是第 次操作):
-
对于操作 ,格式为
v 1 p c
,即为在版本 的基础上,将 修改为 。 -
对于操作 ,格式为
v 2 p
,即访问版本 中的 的值,注意:生成一样版本的对象应为 。
输出格式
输出包含若干行,依次为每个操作 的结果。
5 10
59 46 14 87 41
0 2 1
0 1 1 14
0 1 1 57
0 1 1 88
4 2 4
0 2 5
0 2 4
4 2 1
2 2 2
1 1 5 91
59
87
41
87
88
46
提示
数据规模
对于 的数据,。
对于 的数据,。
对于 的数据,。
对于 的数据:
- ;
- ;
- 设当前是第 次操作,;
- 。
样例说明
所有操作结束后,总共生成了 个版本,编号为 ,依次为:
版本 :59 46 14 87 41
,
版本 :59 46 14 87 41
,
版本 :14 46 14 87 41
,
版本 :57 46 14 87 41
,
版本 :88 46 14 87 41
,
版本 :88 46 14 87 41
,
版本 :59 46 14 87 41
,
版本 :59 46 14 87 41
,
版本 :88 46 14 87 41
,
版本 :14 46 14 87 41
,
版本 :59 46 14 87 91
。