原来我不会线段树懒标记以及永久化。
虽然很多时候用线段树只是什么区间加区间和,区间加区间最值,区间推平区间求和等等,大部分都是不知背后的所以然就瞎打标记就 ok 了,没想到背后还有道理要探寻,免得最后自己跳进了坑里才发现是线段树/树套树没写对。
如果是正常打懒标记,是需要这个标记在时间轴上有结合律的,可以不满足交换律。
回想线段树懒标记下放的过程就可以感性理解是为什么,因为在打标记的时候我们把标记 下放了,后来的标记 一定在前面的标记 后面,所以不需要满足结合律,然而下放标记 的时候可能和前面的标记 合并,但 还没有和更前面的标记 合并,如果 就 GG 了,这里的 就是把两个标记 合并,前面的 合并到了 上面,是我瞎定义的符号,是为了突出这个运算是有先后顺序的。
比方说加法乘法标记我们维护了一个 ,如果两个标记 把他们合并,最终的标记就是 ,假设有三个先后出现的标记 ,我们发现 。这个就是标记在时间轴上具有结合律,但它没有交换律,,这两个标记是不同的。
回想起标记永久化的过程,需要标记在时间轴上具有结合律,是不是必须要求标记在时间轴上有交换律呢?
其实是不必要的,只需要对于两个标记 ,如果能找到一个 使得 ,在一个标记 在线段树上往下走的时候,如果当前节点有个标记 ,让 变成 就可以,因为标记永久化查询的时候不会 pushdown
,所以运算顺序交换了一下,但原先是 ,不得不把 放在 后面合并,就把 变成 ,使得标记永久化查询到的 和 是等价的。
树套树的时候记得看一下能不能标记永久化。
线段树题要考虑:
- 给区间整体打标记的时候,维护的值会发生什么变化;
- 给区间整体打标记的时候,标记之间如何合并;
- 是否能快速地
pushup
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2020-09-28 Luogu P1441 砝码称重