写在前面
本文对线段树问题进行了竞赛向的题型细分,根据操作特性和信息维护方式分为三类,旨在帮助选手快速识别问题模型并选择合适解法。分类基于个人理解,主要面向基础线段树问题的应用场景。
省流 :有关线段树的进阶数据结构在此不做说明,可前往:https://oi-wiki.org/ds/seg/ 进一步了解。
基于 线段树 的 数据结构
第一类线段树
第一类线段树 也就是 大家所熟知的 线段树模板,其操作是线性的(如:加法操作是线性操作,满足交换律和结合律),操作之间没有依赖关系。
懒惰标记和下放操作的维护较为简单。
参考例题 :luogu P3372
AC record :code by min25
引流:模板问题不解析,可转:@justTrying 线段树讲解视频
(注 :单点修改 更加快速的方案是 树状数组 实现,此处不提供 线段树实现)
实现
(此处仅展示 线段树 集成部分)
[code]#define ls (u = al && r mr || r < ml) { return; } if (l >= ml && r qr || r < ql) { return 0; } if (l >= ql && r = ul && r ar) { return; } if (l >= al && r qr || r < ql) { return esp; } if (l >= ql && r |