扫描线_解题技巧

编程技巧

线段树维护的东西

在扫描线的应用中,线段树维护的是“段”而不是“点”!

如下图所示,给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]

但子结点毕竟隶属于父结点,所以向上更新的编程重心,就在于如何合并子结点与父结点的状态。

重合的扫描线

若干条扫描线重合时,一定要考虑增减的先后顺序!

练习题

  • P5490 矩形面积并
  • P1884 矩形面积并
  • hdu-1542 矩形面积并
  • P1904 矩形面积并的升级
  • hdu-1828 矩形周长并
  • hdu-1255 求覆盖大于等于2次的面积
  • hdu-3642 求覆盖大于等于3次的体积,hdu-1255的升级版
  • poj-2482 扫描线思想的应用
  • poj-2464 扫描线思想的应用,经典题,求四个象限的个数
  • hdu-3255 矩形体积并
  • hdu-4052 矩形面积并
  • hdu-4419 矩形面积并的升级,经典例题,求7种相交颜色的面积
  • zoj-3521 扫描线思想的应用,巧用stl对x轴和y轴维持有序
  • zoj-3525 双指针降维后,扫描线求区间权值最大