扫描线_解题技巧
编程技巧
线段树维护的东西
在扫描线的应用中,线段树维护的是“段”而不是“点”!
如下图所示,给55、67、79三点,维护的是55点到67点之间的1号段
、67点到79点之间的2号段
;
55、67、79三点离散化后改为1、2、3三点,
那么自然可以令1点代表其身后的1号段
、2点代表其身后的2号段
。

若要求更新1、3两点,线段树实际上更新的是l=1, r=3-1
,即1号段
和2号段
;
而真正的区间长度用离散数组[r+1] - 离散数组[l]
计算即可。
线段树中,若某结点l=1, r=2
,其代表的区间长度等于离散数组[2+1] - 离散数组[1] = 79 - 55 = 24
线段树中的懒标记
扫描线不需要懒标记!不需要懒标记!部分题目强用懒标记反而出错!
只有向父结点方向更新的操作,不需要传统线段树那样的标记下传操作!
各结点只保存自己区间的更新状态即可!
比如我当前是区间
[1, 2]
,只保存[1, 2]
的修改记录即可,毋须关心[1, 1]
与[2, 2]
但子结点毕竟隶属于父结点,所以向上更新的编程重心,就在于如何合并子结点与父结点的状态。
重合的扫描线
若干条扫描线重合时,一定要考虑增减的先后顺序!