[Python]线段树与二分法
一、先从“二分查找”说起假设你有一本按页码编号的电话簿从第1页到第100页。你想找第37页上的人名。普通查找从第1页开始翻一页一页往后翻翻到第37页。最坏情况要翻100次。二分查找先翻到中间第50页。37 50所以目标在前半本。再翻到前半本的中间第25页。37 25所以在后半本25~50之间。再翻到25~50的中间第37页。找到了。只翻了3次。这就是二分——每次把搜索范围砍掉一半。二、从“二分查找”到“树”现在问题变了你不再只是找某一页而是要频繁地查任意连续几页里人名拼音最靠后的是谁相当于最大值。比如问你“第30页到第50页之间人名拼音最靠后的是谁”如果你每次都从第30页翻到第50页一页一页比过去那就太慢了。能不能像二分查找那样提前把一些“汇总信息”存好查的时候直接拿这就是“树”要做的事情。三、画一棵“汇总树”假设我们有8个时间戳1, 2, 3, 4, 5, 6, 7, 8。每个时间戳上有一个数值。我们先把它们两两分组每组选出一个最大值第1层原始数据 时间戳: 1 2 3 4 5 6 7 8 数值: 10 5 8 3 12 7 9 4 第2层两两一组取最大值 (1,2) → max(10,5) 10 (3,4) → max(8,3) 8 (5,6) → max(12,7) 12 (7,8) → max(9,4) 9 第3层再两两一组取最大值 (1~4) → max(10,8) 10 (5~8) → max(12,9) 12 第4层最终 (1~8) → max(10,12) 12把这个过程画成树的样子(1~8): 12 / \ (1~4): 10 (5~8): 12 / \ / \ (1~2): 10 (3~4): 8 (5~6): 12 (7~8): 9 / \ / \ / \ / \ 1:10 2:5 3:8 4:3 5:12 6:7 7:9 8:4这棵树就是线段树。最下面一排是原始数据叶子节点。上面每一层都是下一层的“汇总”——两个子节点的最大值。最上面是整棵树的“总最大值”。四、用这棵树来查询现在问你“时间戳3到时间戳6之间的最大值是多少”不用一个一个看。我们从树顶往下走根节点 (1~8)太大了不完全在3~6内所以往下走。左孩子 (1~4)部分重叠3~4在范围内继续往下。右孩子 (5~8)部分重叠5~6在范围内继续往下。(1~4) 的左孩子 (1~2)完全不重叠1~2不在3~6内跳过。(1~4) 的右孩子 (3~4)完全在3~6内直接拿它的值 8。(5~8) 的左孩子 (5~6)完全在3~6内直接拿它的值 12。(5~8) 的右孩子 (7~8)完全不重叠跳过。结果max(8, 12) 12。我们只看了几个节点就得到了答案不需要遍历所有8个时间戳。五、为什么叫“动态开点”刚才的例子中我们把所有8个时间戳都画出来了。但实际题目中时间戳范围是1到10^9你不可能真的把这10亿个节点都建好——内存不够。动态开点的意思是只有当你真正用到某个时间戳时才创建它对应的节点。比如你只收到了时间戳1、5、10的数据那树就只长成这样(1~10^9) / \ (1~5 * 10^8) (5 * 10^81 ~ 10^9) / \ (1~2.5 * 10^8) (2.5 * 10^81 ~ 5 * 10^8) / \ (1~1) (2~2.5 * 10^8) | 1:10实际上树只会沿着你用到的路径生长。没用到的区间节点根本就不存在None。这就叫“动态开点”——用多少长多少。六、总结线段树到底干了什么你的问题线段树的回答我要在时间戳5上存一个值从树顶往下走找到时间戳5的叶子存进去。然后一路回溯更新沿途所有父节点的最大值。我要查时间戳3~6的最大值从树顶往下走碰到完全在3~6内的节点就直接拿值碰到完全不在的就跳过部分重叠的就继续往下。最后把所有拿到的值取最大。时间戳范围太大动态开点只用到的节点才创建不浪费内存。整个过程就是“二分思想”的延伸把一个大区间不断对半拆分每个小区间都提前算好“汇总值”。查询时通过二分快速定位到需要的小区间直接拿汇总值不用一个一个数。七、一个让你彻底理解的类比想象你是一个班主任手下有1000个学生学号从1到1000。你想随时知道任意连续学号段里最高分是多少。笨办法每次有人问你就把那个学号段的所有学生成绩翻一遍。1000个学生问1000次就是100万次操作。线段树办法你提前把所有学生按学号分组1~1000 为一组记下最高分分成两组1~500 和 501~1000分别记下最高分再分1~250、251~500、501~750、751~1000分别记下最高分……直到每个学生单独一组现在有人问“学号237到学号684的最高分是多少”你只需要看237~684覆盖了哪些“提前分好组”的区间把这些区间的最高分拿出来比一比得出答案你不需要看每一个学生的成绩只需要看几个“小组汇总”就够了。这就是线段树。

相关新闻

[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录

[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录

1. 引言 最近我在解决一道有趣的编程题:模拟鸿蒙IoT网关的数据采集处理器,要求支持乱序到达的数据包,并实时返回滑动窗口内的最大值。看似简单的需求,却因为“未来数据不可见”、“重复时间戳保留最大值”、“窗口内无数据返回No…

2026/10/7 19:52:19 阅读更多 →
NestJS——环境配置篇

NestJS——环境配置篇

NestJS——环境配置篇 环境变量 通过在package.json设置NODE_ENV,然后在代码中通过process.env.NODE_ENV即可拿到变量。 {..."scripts":{"start:dev": "set NODE_ENVdevelopment&& nest start --watch","start:prod": "N…

2026/10/15 9:16:47 阅读更多 →
Legacy iOS Kit:旧iPhone降级与越狱终极指南

Legacy iOS Kit:旧iPhone降级与越狱终极指南

Legacy iOS Kit:旧iPhone降级与越狱终极指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 还在为旧i…

2026/10/14 14:40:18 阅读更多 →

最新新闻

PPT翻页背后:从ISA到中断的软硬件协作全链路解析

PPT翻页背后:从ISA到中断的软硬件协作全链路解析

你大概率被人问过这句话:请描述一下PPT完成翻页时,电脑软硬件是如何协作的。别小看它,它把一个通用计算机最关键的“输入—处理—输出”全链路都卷了进来。这一问之所以经典,一方面是因为它横跨操作系统、计算机体系结构、编译原理…

2026/10/15 9:16:11 阅读更多 →
YOLO原理分析:(YOLOv8)(DFL 分布焦点损失)(建模边界框位置的不确定性分布)

YOLO原理分析:(YOLOv8)(DFL 分布焦点损失)(建模边界框位置的不确定性分布)

YOLO原理分析:(YOLOv8)(DFL 分布焦点损失)(建模边界框位置的不确定性分布) 前言 YOLOv8 在边界框回归中引入了 DFL(Distribution Focal Loss,分布焦点损失)…

2026/10/15 9:16:11 阅读更多 →
MiniMax H3长视频验证实战:从入口到稳定交付的完整拆解

MiniMax H3长视频验证实战:从入口到稳定交付的完整拆解

“入口能用”这四个字,我一开始是不信的,直到自己亲自踩了一遍MiniMax H3的长视频验证流程,才明白这个坑有多深。打开官网、申请个API Key、跑通一个demo,这些都不难,难的是当你真正拿着一个30秒、60秒甚至更长的视频需…

2026/10/15 9:16:11 阅读更多 →
C语言文件读写入门:fopen/fread/fwrite实战与避坑指南

C语言文件读写入门:fopen/fread/fwrite实战与避坑指南

简介:面向零基础初学者的C语言文件读写入门文档,重点解决初学者对文件打开、写入、读取、关闭流程不熟悉的问题。内容覆盖文件基本概念、标准操作流程,详细讲解fopen、fprintf、fgets、fclose等常用函数的作用与调用方式,并配有可…

2026/10/15 9:16:11 阅读更多 →
多目标粒子群算法在冷热电联供综合能源系统运行优化中的应用

多目标粒子群算法在冷热电联供综合能源系统运行优化中的应用

一个综合能源系统,设备表摆在那里,负荷曲线测出来了,电价气价也都是公开的,优化到底在优化什么?说白了,就是在有限设备容量和能量耦合关系下,把每一台设备的出力安排明白,让整个系统…

2026/10/15 9:16:11 阅读更多 →
拷贝构造函数详解:从深拷贝陷阱到移动语义的现代C++实践

拷贝构造函数详解:从深拷贝陷阱到移动语义的现代C++实践

拷贝构造函数这东西,平时写代码可能不太在意,一旦踩坑,程序崩得莫名其妙,连排查都要花上大半天。我见过太多人因为它半夜抓狂,也见过不少老手在处理对象复制时翻车。这篇文章就把对象复制底层的门道彻底说透&#xff0…

2026/10/15 9:15:05 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →