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

题目描述

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

可持久化数据结构入门(数组篇)的相关文章

用js来实现那些数据结构(数组篇03)

终于,这是有关于数组的最后一篇,下一篇会真真切切给大家带来数据结构在js中的实现方式.那么这篇文章还是得啰嗦一下数组的相关知识,因为数组真的太重要了!不要怀疑数组在JS中的重要性与实用性.这篇文章分为两部分,第一部分会给大家简单说一下数组原生的排序方法sort和reverse.第二部分会给大家简单说一下二维和三维数组.都不难,仔细看,很简单的. 1.reverse() reverse比较容易理解,颠倒数组中元素的顺序,也就是第一个变成最后一个,最后一个呢变成第一个. var nums = [0,

数据结构之数组篇

我本是在广州体育学院的一名体育生,后来通过一些巧合接触了前端,觉得挺有意思.一行行的代码能编写出一个炫酷的网页以及完成牛逼的用户交互.所以决定跨进it的领域,进行残忍的掉发修行.兜兜转转已经学习了有半年时间了.今天这是我写的第一篇博客,打算在此记录我在掉发之旅中的一些心得,同时也给自己做个总结,好了废话不多说,开始着手写吧. 数组是在JS里经常遇到的数据类型.数组可存储同一系列的数据,也可在数组里存储不同数据类型的值. 首先总结一下数组一些核心方法:{ 1.concat        拼接两个或

可持久化数据结构之主席树

转自:http://finaltheory.info/?p=249 HomeACM可持久化数据结构之主席树 06十2013 可持久化数据结构之主席树 Written by FinalTheory on. Posted in ACM 引言 首先引入CLJ论文中的定义: 所谓的“持久化数据结构”,就是保存这个数据结构的所有历史版本,同时利用它们之间的共用数据减少时间和空间的消耗. 本文主要讨论两种可持久化线段树的算法思想.具体实现以及编码技巧. 核心思想 可持久化线段树是利用函数式编程的思想,对记录

[转]算法与数据结构——入门总结与自学资料推荐

[转]算法与数据结构——入门总结与自学资料推荐 本文转自(http://www.cnblogs.com/jiahuix/p/4868881.html) 一.大纲 博客:董西城.Vamei 思维导图下载地址:http://pan.baidu.com/s/1gdCqW8r 二.数据结构资料推荐 数组:查找快O(1),插入删除慢O(n) 链表:查找慢O(n),插入删除快O(1) 块状链表:查找插入删除O(sqrt(n)):数组+链表: 队列:先进先出 堆栈:先进后出 双端队列:队列与堆栈结合,有hea

ElasticSearch入门 第一篇:Windows下安装ElasticSearch

https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-4 这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档

SSM 框架集-01-详细介绍-入门问题篇

SSM 框架集-01-详细介绍-入门问题篇 刚开始了解 SSM,首先先解决几个基础问题 1.什么是 SSM 框架集? SSM(Spring+SpringMVC+MyBatis)框架集由 Spring.MyBatis 两个个开源框架整合而成(SpringMVC 是 Spring 中的部分内容).常作为数据源较简单的 web 项目的框架. SSM 是标准的 MVC 模式,将整个系统划分为表现层,controller层,service层,DAO层四层.使用 spring MVC 负责请求的转发和视图管

一 数据结构入门

基本概念 有哪些数据结构? 线性表,栈,队列,串,数组,广义表,树,二叉树,图 重点是线性表,二叉树 每种数据结构需要掌握,添加.更新.删除.查询.排序等操作的实现 学习数据结构的四种境界: 境界1:听懂理论,听懂算法思路 境界2:完成主要数据结构基本算法的实现(理论+实践,数据结构入门) 境界3:完成更多数据结构更多算法的实现 境界4:融会贯通,举一反三,在后续开发中综合应用数据结构知识. 数据(data): 是描述客观事物的数值.字符.以及能输入及其且能被处理的各种符号集合.例如:数值.字符

数据结构第一讲,数据结构入门了解知识.

目录 数据结构入门简介 一丶数据结构的四种分类 1.集合结构 2.线性结构 3.树结构 4.图结构 二丶物理结构简介 1.存储器 2.数据元素的存储形式 三丶总结 数据结构入门简介 一丶数据结构的四种分类 我们常听的一句话就是, 数据结构 + 算法 = 程序 意思就是在我们的程序设计中,数据结构是必不可少的,那么什么是数据结构,数据结构简而言之就是针对数据关系而生产的产物.可能不是很理解.因为我们程序编写过程中,程序中产生的数据怎么存储这都是数据关系. 常见的数据结构种类. 集合 线性结构 树结

【史上最强JavaSE笔记】之数组篇

各位程序猿,各位攻城狮,各位蜥蜴鸥以及各位棕鲸鲤们~~大家好,我是潘师傅,欢迎大家收看由我为你们带来的[史上最强JavaSE笔记]系列,其实也可以叫[嘻哈JavaSE笔记]的,第一次在博客园发帖,想想还真是有点小激动呢,各位求支持呀,哈哈,那么回归正题,我把自己之前学习积累的笔记拿出来跟大家分享一下,方便大家更好的理解和复习,希望能够对大家有所帮助哈,这次发的是JavaSE方面数组篇的,内容不一定全面哦,欢迎大家前来留言交流哈,不足的地方还望大家多多指出和指导哈~(由于首次发文章,布局可能比较乱