首页 > 其他分享 >可持久化数据结构1

可持久化数据结构1

时间:2024-08-20 20:51:27浏览次数:11  
标签:cnt 持久 值域 线段 tree 修改 数据结构

非持久化数据结构一般需要维护数据集最新状态,而可持久化要求查询历史状态。

可持久化Trie树

朴素:每次修改重新存一遍 \(-> MLE\)。

正解:只存被修改部分,其余不变,即第 \(i\) 次修改后,树变为第 \(i\) 次修改产生新的部分加上前 \(i-1\) 次修改产生部分。

增长同规模。

用普通线段树维护,\(m\) 次操作,时间复杂度 \(O(4n+mlog_n)\)。

可持久化线段树

例:单点修改,查询区间最大值

将 \(a[x]\) 加上 \(d\),从表示 \(x\) 位置的叶子节点修改到根

修改时,对所有会被修改的点重开一树,树上未修改的点与新图父亲连边,被修改的点复制连边

更新 \(p\) 节点时,若 \(p\) 不为叶子,则其左右儿子之一也会被修改

假设 \(ls\) 被更新,\(ls\) 递归时,令 \(p'\) 左儿子为 \(ls'\),右儿子为 \(rs\)

空间复杂度 \(O(4n+mlog_n)\)

由于树中每个点只有一个父亲,而可持久化线段树有多个根,所以只能用动态开点的方法编号

主席树(可持久化权值线段树)

区间第 \(k\) 小:
\(root[r]->\) 在值域区间 \([x,y]\) 的 \(cnt_1\) 值

\(root[l-1]->\) 在值域区间 \([x,y]\) 的 \(cnt_2\) 值

插入次序在 \([l,r]\) 之间,且值域在 \([x,y]\) 之间数字个数:\(cnt_1-cnt_2\)

第 \(i\) 棵线段树保存从第一次插入到第 \(i\) 次插入信息

序列问题 \(->\) 树上问题

\(tree[i]\) 表示从根节点到 \(i\) 的路径上信息(值域上区间和)

\(tree[u]+tree[v]-tree[lca]-tree[fa(lca)]\)

区间第 \(k\) 小(带单点修改):

线段树看成树状数组上一元素

设树状数组中下标 \(i\) 所记录信息集合为 \(S_i\),那么我们定义线段树 \(T_i\) 是维护 \(S_i\) 内信息的所有点的集合

标签:cnt,持久,值域,线段,tree,修改,数据结构
From: https://www.cnblogs.com/WYTRL/p/18369056

相关文章

  • CoreData 核心指南:Swift 中的数据持久化之道
    标题:CoreData核心指南:Swift中的数据持久化之道引言在Swift开发中,数据持久化是一个不可或缺的部分。CoreData作为Apple官方提供的数据管理框架,为iOS、macOS、watchOS和tvOS应用提供了强大的数据存储解决方案。本文将带领读者深入了解如何在Swift中使用CoreDa......
  • 【数据结构】栈和队列的实现
    正文1.栈1.1概念与结构栈:⼀种特殊的线性表,其只允许在固定的⼀端进⾏插⼊和删除元素操作。进⾏数据插⼊和删除操作的⼀端称为栈顶,另⼀端称为栈底。栈中的数据元素遵守后进先出LIFO(LastInFirstOut)的原则。压栈:栈的插⼊操作叫做进栈/压栈/⼊栈,⼊数据在栈顶......
  • 数据结构-队列 c语言使用链表和数组分别实现
    队列定义队列(queue)是一种遵循先入后到规则的线性数据结构,将队列头部称为“队首”,尾部称为“队尾”,把元素加入队尾称为“入队”,删除队首元素称为“出队”。队列实现基于链表的实现将链表的头节点和尾结点分别视为“队首”和“队尾”,规定队尾仅可添加节点,队首仅可删除节点。......
  • 洛谷P3528 [POI2011] PAT-Sticks && 数据结构之堆
    传送门:P3528[POI2011]PAT-Sticks与买桂花同载酒,终不似,少年游这是现在为止洛谷上的最优解!!翻译题目描述小约翰尼的爷爷奶奶送给他一份生日礼物。这份礼物是一盒长度和颜色各异的木棍。约翰尼想知道,在他得到的这组木棍中,是否存在三根木棍能够组成一个三边颜色各不相同的三......
  • 《数据结构》最短路径Dijkstra算法
                                    最短路径Dijkstra算法分析生长点ABCDEFP(A)=FAD(A)=130P(B)=FBD(B)=24P(C)=FCD(C)=10P(D)=——D(D)=无穷P(E)=——D(E)=无穷CP(A)=FAD(A......
  • JAVA的数据结构
    JAVA数据结构一、数组(Arrays)可以存储固定大小的相同类型的元素。int[]array=newint[5];优点:随机访问元素效率高缺点:大小固定,插入和删除元素相对较慢二、列表(Lists)1、ArrayListList<String>arrayList=newArrayList<>();特点:动态数组,可变大小优点:高效的随机访......
  • 【NOI】C++数据结构入门之一维数组(二)数组找数
    文章目录前言一、概念1.导入2.数组找数二、例题讲解问题类型——查找特定值问题:1154.数组元素的查找问题:1815.最后一次出现该数的位置问题类型——查找最值问题:1152.求n个数的最大值和最小值问题:1168.歌唱比赛评分问题类型——统计出现次数问题:1810.最贵商品和最......
  • 数据结构之 红黑树入门教程、红黑树代码示例
    红黑树(Red-BlackTree)是一种自平衡的二叉查找树(BST),它在插入、删除和查找操作后通过一些特定的规则来维护树的平衡,从而确保这些操作的时间复杂度始终为O(logn)。红黑树主要应用在需要高效动态集合操作的场景中,如操作系统中的进程调度器、数据库中的索引等。红黑树的基本性......
  • 数据结构详细教程绪论
    ......
  • 数据结构day01(数据结构、算法基础知识)
    目录【1】数据结构基础知识1》什么是数据结构2》数据 3》逻辑结构1>线性关系2>层次关系3>网状关系4》存储结构  1>顺序存储 2>链式存储3>索引存储结构 4>散列存储 5》操作【2】算法基础知识1>什么是算法 2>算法设计 3>算法的特性 4>评价算法的......