码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-03-12 14:07:26      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:初始   输入输出   长度   持久化   数据   数据结构   数组   必须   一个   

题目描述

如题,你需要维护这样的一个长度为 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!