可持久化数据结构入门(数组篇)

Posted wwlwqwq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可持久化数据结构入门(数组篇)相关的知识,希望对你有一定的参考价值。

题目描述

如题,你需要维护这样的一个长度为 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个节点被修改,所以每次只需要单独新开一条链出来,维护一下节点信息就行了。

以上是关于可持久化数据结构入门(数组篇)的主要内容,如果未能解决你的问题,请参考以下文章

可持久化线段树入门浅谈

[模板]可持久化数组

可持久化 trie 的简单入门

可持久化线段树

YSZOJ:#247. [福利]可持久化线段树 (最适合可持久化线段树入门)

可持久化算法