可持久化线段树(Persistent Segment Tree)详解
📅 2026/8/2 2:26:37
👁️ 次浏览
1. 什么是可持久化线段树可持久化线段树Persistent Segment Tree又称主席树是一种能够保存历史版本的数据结构。它在普通线段树的基础上通过复用未修改的节点来创建新的版本从而在O(log n)的时间复杂度内支持对历史版本的查询和修改。2. 核心思想可持久化线段树的核心思想是节点复用当修改某个节点时只创建该节点的新副本而其他未修改的节点则直接指向旧版本的节点。这样每个版本都对应一棵完整的线段树但不同版本之间共享了大量节点。3. 数据结构设计每个节点需要存储以下信息左子节点指针右子节点指针节点维护的值如区间和、最大值等4. 基本操作4.1 建树struct Node { int l, r; // 左右子节点编号 int sum; // 区间和 } tr[N * 40]; // 需要开足够大的空间 int build(int l, int r) { int p idx; if (l r) { tr[p].sum a[l]; return p; } int mid (l r) 1; tr[p].l build(l, mid); tr[p].r build(mid 1, r); tr[p].sum tr[tr[p].l].sum tr[tr[p].r].sum; return p; }4.2 单点更新int update(int pre, int l, int r, int pos, int val) { int p idx; tr[p] tr[pre]; // 复制原节点 if (l r) { tr[p].sum val; return p; } int mid (l r) 1; if (pos mid) tr[p].l update(tr[pre].l, l, mid, pos, val); else tr[p].r update(tr[pre].r, mid 1, r, pos, val); tr[p].sum tr[tr[p].l].sum tr[tr[p].r].sum; return p; }4.3 区间查询int query(int p, int l, int r, int ql, int qr) { if (ql l r qr) return tr[p].sum; int mid (l r) 1, res 0; if (ql mid) res query(tr[p].l, l, mid, ql, qr); if (qr mid) res query(tr[p].r, mid 1, r, ql, qr); return res; }5. 经典应用5.1 静态区间第k小这是主席树最经典的应用。通过对值域建立可持久化线段树每个版本对应前缀[1, i]中各个数值出现的次数。5.2 可持久化数组支持历史版本的数组单点修改和查询。5.3 树上路径查询结合树链剖分或树上差分可以处理树上路径的查询问题。6. 时空复杂度分析时间复杂度每次操作O(log n)空间复杂度O(n log n)因为每次修改只会创建O(log n)个新节点7. 注意事项需要预先估算节点数量一般开N * 40的空间注意版本号的存储和管理离散化可以减小值域降低空间消耗合理设计节点信息避免冗余存储8. 总结可持久化线段树是一种功能强大的数据结构特别适合需要访问历史版本的场景。虽然实现相对复杂但掌握了其核心思想和实现技巧后能够解决许多传统数据结构难以处理的问题。
Kotlin 冷流与热流详解核心区别特性冷流 (Cold Flow)热流 (Hot Flow)数据生产时机有订阅者才开始生产独立于订阅者,自行生产订阅者接收数据每个订阅者收到完整序列订阅后才开始接收多订阅者行为各自独立,数据重新生产共享同一数据源典型代表flow { }Stat…
📅 2026/8/2 2:26:37
Unlimited-OCR 部署运行(9/13):正确启动 SGLang 模型,参数逐项理由 前 8 篇(编译移植篇)我们把 sglang-kernel 从源码编出了 win_amd64 wheel,并让 sglang 高性能后端在原生 Windows 上装得上、…
📅 2026/8/2 2:25:37
编者按,本文来自一个真实开源项目的复盘,写的是一套叫 XTAO 的 Agent 规划与执行框架。它用 G4C 做 Plan 生成,用 TAO(Think-Action-Observation,思考-行动-观察) 做步骤级执行,用 Replan 做执行中的自我修正。读完这篇,你会对「为什么 Agent 做着做着就偏了」「怎么让…
📅 2026/8/2 2:25:37
注意要打开代码所在的文件夹才能切换虚拟环境,吧项目用到的代码放在一个文件夹里才能调用虚拟环境可以放在conda的文件夹里,不影响教程来在视频博主
📅 2026/8/2 3:16:39
1 前言:Flink CDC 定位与整体架构总览在实时数仓建设、数据库同步、数据异构迁移、实时数据集成场景中,Flink CDC 已然成为行业主流标准方案。区别于传统定时全量抽取 Sqoop、轮询查询同步方案,Flink CDC 依托数据库原生二进制日志采集&#…
📅 2026/8/2 3:16:39
1. 项目概述:为什么RTC校准是嵌入式开发的“必修课”?在嵌入式项目里,实时时钟(RTC)模块的地位很特殊。它不像主频动辄几百兆的CPU那样引人注目,也不像高速ADC那样追求极致的采样率。它的核心任务就一个&am…
📅 2026/8/2 3:16:39
如果使用conda安装的openclaw删除conda下的openclaw环境删除文件:C:\Users\NINGMEI\.openclaw如果不确定具体位置,可以在 PowerShell 中运行以下命令查找并删除:# 查找 .openclaw 文件夹
Get-ChildItem -Path $HOME -Filter .openclaw -Force…
📅 2026/8/2 3:16:39
B站up帮我大忙
【Windows11中文用户名改英文用户名!解决软件报错】出错啦! - bilibili.com
视频很详细而且演示了各种会出现的问题也有对应的解决办法
ob风波
全部弄完准备美美学习,打开ob天塌了 什么都没有了
ds老师
再次救助患难的我 太给力惹 思…
📅 2026/8/2 3:16:38
1. 项目概述:为什么我们需要一个“会解释”的安全护栏?最近在折腾大语言模型(LLM)应用落地的朋友,估计没少为“安全”这事儿头疼。你精心调教的模型,可能在99%的场景下都表现得像个模范生,但总有…
📅 2026/8/2 3:15:38
1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…
📅 2026/8/2 0:00:48
温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…
📅 2026/8/2 0:00:48
1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同ÿ…
📅 2026/8/2 0:00:48
1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…
📅 2026/8/2 0:00:48
温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…
📅 2026/8/2 0:00:48
1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同ÿ…
📅 2026/8/2 0:00:48
AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言
HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…
📅 2026/8/2 1:22:12
无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut
在数字媒体创作领域,视频编辑处理的质量损…
📅 2026/8/2 0:02:59
1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…
📅 2026/8/2 1:22:12