当前位置: 首页 > news >正文

线段树的区间修改和懒标记

线段树的区间修改和懒标记

如果要求修改区间 \([l,r]\),把所有包含在区间 \([l,r]\) 中的节点都遍历一次、修改一次,时间复杂度无法承受。我们这里要引入一个叫做 「懒惰标记」 的东西。

懒惰标记,简单来说,就是通过延迟对节点信息的更改,从而减少可能不必要的操作次数。每次执行修改时,我们通过打标记的方法表明该节点对应的区间在某一次操作中被更改,但不更新该节点的子节点的信息。实质性的修改则在下一次访问带有标记的节点时才进行。

仍然以最开始的图为例,我们将执行若干次给区间内的数加上一个值的操作。我们现在给每个节点增加一个 \(t_i\),表示该节点带的标记值。

最开始时的情况是这样的
segt2
现在我们准备给 \([3,5]\) 上的每个数都加上 \(5\)。根据前面区间查询的经验,我们很快找到了两个极大区间 \([3,3]\)\([4,5]\)(分别对应线段树上的 \(5\) 号点和 \(3\) 号点)。

我们直接在这两个节点上进行修改,并给它们打上标记:
segt3
我们发现,3
3 号节点的信息虽然被修改了(因为该区间管辖两个数,所以 𝑑3
d_3 加上的数是 5 ×2 =10
5 \times 2=10),但它的两个子节点却还没更新,仍然保留着修改之前的信息.不过不用担心,虽然修改目前还没进行,但当我们要查询这两个子节点的信息时,我们会利用标记修改这两个子节点的信息,使查询的结果依旧准确.

接下来我们查询一下 [4,4]
[4,4] 区间上各数字的和.

我们通过递归找到 [4,5]
[4,5] 区间,发现该区间并非我们的目标区间,且该区间上还存在标记.这时候就到标记下放的时间了.我们将该区间的两个子区间的信息更新,并清除该区间上的标记.
segt4
现在 \(6\)\(7\) 两个节点的值变成了最新的值,查询的结果也是准确的。

void update(int l,int r,int c,int s,int t,int p){if(l<=s && t<=r){d[p]+=(t-s+1)*c,b[p]+=c;return;}int mid=s+((t-s)>>1);if(b[p]&&s!=t){d[p<<1]+=b[p]*(mid-s+1);d[(p<<1)+1]+=b[p]*(t-mid);b[p<<1]+=b[p];b[(p<<1)+1]+=b[p];b[p]=0;}if(l<=mid)update(l,r,c,s,mid,p<<1);if(r>mid)update(l,r,c,mid+1,t,(p<<1)+1);d[p]=d[p<<1]+d[(p<<1)+1];
}
http://www.jsqmd.com/news/750102/

相关文章:

  • 从零构建极简静态网站:复古项目www-sacred的现代启示
  • BetterNCM安装器终极指南:一键解锁网易云音乐隐藏功能
  • 基于多目标优化的PC连续刚构桥预应力钢束配束设计【附代码】
  • 第1篇:认识仓颉——搭建开发环境 仓颉原生中文编程
  • 3分钟极速上手:Thorium浏览器让老旧电脑也能流畅上网的秘诀
  • # 造过轮子的人学框架有多快——我自己写完IOC和AOP,Spring就是换个API
  • 迭代与递归
  • 3步解锁QQ音乐加密音频:macOS免费高效转换终极方案
  • HoYo-Glyphs终极指南:11款米哈游游戏字体从安装到创意应用完整教程
  • 具身智能体系统Dugong:从AI推理到实时空间界面的编译与渲染
  • 魔兽争霸3完全优化指南:WarcraftHelper 2025简易配置教程
  • 鸣潮工具箱WaveTools:3步轻松解锁120帧与智能抽卡分析
  • 国家安全部曝光AI“投毒”产业链:你平时用的AI,可能早就被人动了手脚
  • LinkSwift:八大网盘直链解析终极解决方案,彻底告别下载限速烦恼
  • 3个核心场景+5个实战技巧:XHS-Downloader如何帮你高效管理小红书内容资源
  • 2004年的Java项目翻出来了我哭了——一个老程序员的回忆杀
  • 别再傻傻分不清!手机卡顿、电脑慢?可能是你的EMMC、UFS、SSD没选对
  • 内容创作平台集成 Taotoken 实现多模型文本生成与优化
  • AT24C02页写翻车实录:我的参数为什么被覆盖了?详解EEPROM页边界与防覆盖技巧
  • 提升arm7开发效率:快马智能生成常用驱动与模块代码库
  • 5步解锁NVIDIA显卡隐藏性能的完整指南:NVIDIA Profile Inspector实战教程
  • 语音数据集选择与应用实践指南
  • Higgsfield:简化多节点大模型训练的分布式编排框架实战指南
  • 第2篇:数据与类型——仓颉的基础数据类型 仓颉原生中文编程
  • Mac终极音乐解密指南:3步解锁QQ音乐加密文件,实现跨平台自由播放
  • 低代码插件热重载失败?(从py_compile缓存污染到__pycache__权限锁死的完整排障链)
  • Xiaomusic插件架构源码级解析:动态加载与异步事件处理机制深度剖析
  • 别再只会用滤镜了!用Python+OpenCV手把手教你调出专业级照片锐化效果(USM/SM实战)
  • 立即解决!Windows任务栏透明美化神器TranslucentTB全攻略
  • 工业备料封神!郑州博尚木材切片机实测,精度拉满还省电,木材厂/加工厂必入 - 会飞的懒猪