尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

历史和线段树

历史和线段树
📅 发布时间:2026/6/19 15:04:20

我们一般在处理区间修改的操作时,会在线段树上打懒标记,意思是这个结点所代表的区间中的所有数都要同时进行一系列修改。为了更容易理解历史和线段树,我们先来回顾一下普通线段树的区间加操作。

\(\mathbf{Preperation}\)

引理

对于区间加,区间求和问题,我们在做线段树时,有结论:子节点的懒标记时间比父节点的懒标记靠前。


我们把注意力放在父子结点的懒标记之间的时间关系上,我们发现,操作后,新的被打上标记的顶点 \(t\),它的父亲节点的标记都被下放了,所以父亲结点的懒坐标只可能在之后出现。

\(\mathbf{Part. 1}\)

进入正题。

给你一个序列 \(a_1\) 到 \(a_n\),初始全为 \(0\)。你需要支持如下操作:

  • 将 \([l, r]\) 区间中的每个数 \(a_i\) 加上 \(y\)
  • 查询 \([l, r]\) 在历史每个时刻的和的总和

容易想到每次修改的时候,我们对 \([l, r]\) 的 \(a_i\) 区间加。然后,我们在全局上打一个历史和更新的标记。

我们对每个结点,记录三个信息,分别是 \(his, sum, len\),表示这个区间的历史和,区间和,区间长度。由引理,我们知道在下放懒标记和单点加标记的时候,可以视作一些懒标记在前,一些懒标记在后,现在要合并在一起。

但这没有只有加法标记的时候那么显然,因为现在还有一个历史和更新操作,不是很好合并。

下文介绍两种方法。(还有一种我觉得不涉及历史和线段树的思想,不在赘述)

\(\mathbf{Part. 1.1 \ Matrix}\)

我们考虑刻画这两种标记分别在对这三个信息做什么。

  • 区间加标记 \(v\):\(sum = sum + len \times v\)
  • 历史和更新标记:\(his = his + sum\)

实际上,这两种标记都只是在这三个变量里做线性变换,因此考虑用矩阵刻画。

我们把要存储的信息全部列在矩阵里,也就是 \(\begin{bmatrix}his\\sum\\len\end{bmatrix}\),那么有:

  • 区间加标记 \(v\):乘上 \(\begin{bmatrix}1 & 0 & 0 \\0 & 1 & v\\0 & 0 & 1\end{bmatrix}\)
  • 历史和更新标记:乘上 \(\begin{bmatrix}1 & 1 & 0\\0 & 1 & 0\\0 & 0 & 1\end{bmatrix}\)

现在,标记的合并都被刻画成了矩阵乘法,于是就十分好做了。

\(\mathbf{Part. 1.2 \ Tag \ Queue}\)

我们直接考虑如何合并两个标记队列。假设有两个标记队列 \(A, B\),\(A\) 在前,\(B\) 在后。我们先把只在 \(A\) 或者 \(B\) 内的贡献加起来,计这个内部贡献为 \(ret\)。那么,我们只需要计算两个标记队列之间的贡献即可。

对于 \(A\) 队列里的任意一个加法标记,它在 \(B\) 每次历史和更新时都会被算一次,因此两边之间的贡献就是 \(add_A \times upd_B\),其中 \(add_A\) 表示 \(A\) 中的加法标记和,\(upd_B\) 表示 \(B\) 中的历史和更新标记个数。

我们对每个结点,再计三个数 \(add, upd, ret\) ,用来表示整个标记队列。那么我们考虑一次下放操作,有 \(sum = sum + add'\),\(ret = ret + ret' + add \times upd'\),\(add = add + add'\),\(upd = upd + upd'\)。根据这个转移即可。


我们比较一下这两种方法。

  • 矩阵计 tag 适用性十分高,因为只需要你的操作都是线性变换,就可以用矩阵做。但缺点是常数比较大。
  • 暴力考虑标记序列合并,其实相当于直接爆拆矩阵的乘法运算,所以适用性肯定没有矩阵好,比如区间覆盖就比较难处理。

我们稍微结合一下两个方法的优点,考虑矩阵哪里是不动的,我们就只对剩下的位置进行计算,这样适用性会很高,常数也会变小。

那么现在,最基础的历史和线段树就讲完了。实现可能需要注意一下细节。

习题稍后更新。(我还没写/ll)

相关新闻

  • [KaibaMath]1012 关于收敛数列保号性的推论的证明
  • CSP-S模拟赛加赛 比赛总结
  • 我要好好写博客了 - Milo

最新新闻

  • 赣州市黄金回收去哪儿好?整理了5家靠谱实体店地址电话 - 嵩山路大王
  • 2026 哈尔滨首饰回收哪家好 | 5 家正规门店盘点 奢二网高价上榜 - 讯息早知道
  • 终极Windows C盘清理指南:3步彻底解决C盘爆红问题
  • OpenClaw:企业微信合规自动化协议桥接器
  • Smoke评测:Qwen3 Max约束+23分逆袭,GPT-o3材料约束暴跌15.2分
  • 珠海修车保养门店怎么选?金鼎区域汽修门店对比与养车避坑干货 - 国麟测评

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号