算法札记:线段树的用途

发布时间:2026/9/28 20:53:01

算法札记:线段树的用途
线段树Segment Tree是一种基于分治思想的二叉树形数据结构专为高效处理‌动态区间查询与区间修改‌而设计其核心优势在于支持‌任意区间操作‌包括最值、求和、乘积、GCD、异或等并通过‌懒标记Lazy Propagation‌ 实现区间更新的均摊O(log n)复杂度。✅ 核心用途与适用场景表格应用类型问题描述时间复杂度关键技术‌区间最值查询‌动态数组中快速查询任意区间最大值/最小值O(log n)每节点存储区间最值合并时取max/min‌区间求和更新‌数组元素频繁区间加/减需实时查询区间和O(log n)懒标记记录待传播的加法增量‌区间赋值操作‌将某区间所有元素设为固定值如清零、置1O(log n)懒标记存储赋值指令覆盖原值‌区间GCD/乘积‌求区间内所有元素的最大公约数或乘积O(log n)利用结合律gcd(gcd(a,b),c) gcd(a,b,c)‌区间异或和‌查询区间内所有元素的异或结果O(log n)异或满足结合律与自反性可合并‌动态排名系统‌维护动态集合中第k小元素结合权值线段树O(log n)值域建树节点存储频次二分查找‌静态区间第k小‌多次查询历史数组中某区间第k小值主席树O(log n)可持久化线段树版本差分实现 ‌适用场景特征‌数据频繁‌区间修改‌非仅单点查询操作‌多样化‌非仅求和需要‌历史版本回溯‌如离线查询数据规模大10⁴ ~ 10⁶要求‌稳定对数时间‌ 支持的操作类型基于结合律线段树能维护的运算必须满足‌结合律‌Associative Law(a⊕b)⊕ca⊕(b⊕c)表格运算类型是否支持说明‌区间和‌✅最基础应用∑ 满足结合律‌区间最大值‌✅max(max(a,b),c)max(a,max(b,c))‌区间最小值‌✅同上min 同理‌区间乘积‌✅乘法满足结合律注意溢出处理‌区间GCD‌✅gcd(gcd(a,b),c)gcd(a,gcd(b,c))‌区间异或‌✅异或满足结合律与交换律常用于位运算题‌区间众数‌❌不满足结合律无法合并子区间结果‌取模运算‌❌(amodb)modcamod(bmodc)‌函数变换‌❌如 f(x)1/x​ 无法合并 与树状数组的对比表格维度线段树树状数组‌支持操作‌✅ 区间修改、区间查询、最值、GCD、异或等❌ 仅限单点更新 前缀和可差分运算‌区间修改‌✅ 原生支持懒标记❌ 需配合差分数组复杂且不直观‌代码复杂度‌较高需递归、懒标记、节点结构极简3–5行核心代码‌空间开销‌O(4n)O(n)‌缓存效率‌中等树形跳转高连续数组访问‌常数因子‌较大极小‌适用优先级‌需要区间修改或复杂运算时仅需前缀和/单点更新时✅ ‌选择原则‌‌用线段树‌需要“区间加”、“区间赋值”、“最值查询”、“历史版本”‌用树状数组‌仅需“单点改、区间求和”且追求极致速度 高级变体与优化1. ‌可持久化线段树主席树‌‌核心思想‌每次修改仅复制修改路径上的节点未修改部分共享旧版本。‌空间复杂度‌O(n log n)支持查询任意历史版本。‌典型应用‌静态数组中多次查询区间第k小元素如洛谷 P3834离线查询“某时刻区间内不同数字个数”‌实现关键‌每个版本对应一个根节点查询时用 Tr−Tl−1​ 得到区间信息。2. ‌动态开点线段树‌‌适用场景‌值域极大如 109但操作稀疏。‌优势‌不预建整棵树按需创建节点节省内存。‌典型用途‌动态维护稀疏数组的区间统计如在线计数、权值线段树。3. ‌权值线段树‌将‌值域‌作为下标建树节点存储该值出现的频次。用于求第k小、排名、区间不同元素个数等。 替代结构对比何时不用线段树表格结构优势局限适用场景‌分块Block‌常数小、缓存友好、支持简单区间加/赋值查询/修改复杂度 O(√n)数据规模 1e5 级别修改频繁内存受限‌稀疏表Sparse Table‌区间最值查询 O(1)仅支持静态数据不支持修改静态数组上大量RMQ查询如比赛预处理‌Fenwick树树状数组‌代码极简、空间最优仅支持可差分运算单点更新 区间求和追求极致效率⚠️ ‌注意‌若数据‌完全静态‌且仅需最值查询优先选稀疏表若‌修改频繁‌且值域大优先选动态开点线段树或分块。 实战应用案例表格场景技术方案效果‌实时游戏排行榜‌权值线段树 动态开点支持百万玩家分数动态插入与排名查询‌GIS热力图统计‌二维线段树每秒更新数万点击点毫秒级查询矩形区域总和‌数据库索引优化‌可持久化线段树支持事务回滚、历史版本快照查询‌算法竞赛题‌懒标记线段树解决“区间加、区间求和、区间最值”混合题型如Codeforces 339D

相关新闻

Linux下编译MFEM

Linux下编译MFEM

2026/9/27 4:46:20

本文记录在Linux下编译MFEM的过程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1Boost1.74.0oneAPI2024.2.1 一、VS Code 下载VS Code,然后安装以下插件, Task Explorer Output Colorizer Git Extension Pack G…

终极Mac光标自定义工具:Mousecape完全指南,三步打造个性化桌面体验

终极Mac光标自定义工具:Mousecape完全指南,三步打造个性化桌面体验

2026/9/7 13:49:01

终极Mac光标自定义工具:Mousecape完全指南,三步打造个性化桌面体验 【免费下载链接】Mousecape Cursor Manager for OSX 项目地址: https://gitcode.com/gh_mirrors/mo/Mousecape 厌倦了Mac系统千篇一律的白色箭头光标吗?想要让你的桌…

小程序毕设选题推荐:基于 SpringBoot 的乡镇医疗预约服务小程序的设计与实现 面向乡镇卫生院的线上问诊预约小程序【附源码、mysql、文档、调试+代码讲解+全bao等】

小程序毕设选题推荐:基于 SpringBoot 的乡镇医疗预约服务小程序的设计与实现 面向乡镇卫生院的线上问诊预约小程序【附源码、mysql、文档、调试+代码讲解+全bao等】

2026/9/26 21:15:03

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/28 4:08:17

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/28 16:01:49

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/28 2:15:29

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/28 3:14:54

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/28 3:58:00

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/28 3:47:14

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/28 16:01:48

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/28 5:05:21

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/28 16:01:48

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…