题目描述
如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作
1.在某个历史版本上修改某一个位置上的值
2.访问某个历史版本上的某一位置的值
此外,每进行一次操作(对于操作2,即为生成一个完全一样的版本,不作任何改动),就会生成一个新的版本。版本编号即为当前操作的编号(从1开始编号,版本0表示初始状态数组)
输入输出样例
输入样例#1
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
输出样例#1:
59
87
41
87
88
46
维护序列操作,我们很容易就想到了用线段树来存储,但是必须要把之前所有版本都存下来吗?
我们会发现,修改一个节点,只会对它的祖先产生影响,也就是最多log2n个节点被修改,所以每次只需要单独新开一条链出来,维护一下节点信息就行了。
原文地址:https://www.cnblogs.com/wwlwQWQ/p/10516110.html
时间: 2024-10-28 09:51:16