『线段树扫描线算法』简单理解

Question1

给定若干个矩形,线矩形的面积并。分别用 O ( n 2 ) O(n^2) O(n2)级别和 O ( n   l o g   n ) O(n\ log\ n) O(n log n)级别的算法解决。

我们的做法是对矩形的纵坐标进行离散化,得到离散化后的坐标 y 1 , y 2 , . . . , y m . y_1,y_2,...,y_m. y1,y2,...,ym. v a l ( y ) val(y) val(y)表示原始坐标值。这样我们就可以将浮点数转化为了方便处理的整数,有利于数组下表的表示。

我们用数组 c [ i ] ( i ∈ [ 1 , m ) ) c[i](i∈[1,m)) c[i](i[1,m))存储在当前情况下, y i + 1 − y i y_{i+1}-y_{i} yi+1yi的纵区间的覆盖情况。 0 0 0表示没有覆盖, k k k表示被覆盖了 k k k次,不可能出现小于 0 0 0的情况,因为只有“被覆盖的次数”和“没有覆盖”两种情况的存在。

现在我们回到这个面积计算的题中:我们可以将一个矩形的左右边界分别处理,左边界带来的是“正影响”,会对答案做出纵区间大小的贡献;右边界带来的是“负影响”,会使先前的正影响消失。这也是上面c数组都是非负数的原因。因此我们可以将左右边界分开,用四元组表示(横坐标,上边界,下边界,影响);用 ( x i , y 1 , i , y 2 , i , f i ) (x_i,y_{1,i},y_{2,i},f_i) (xi,y1,i,y2,i,fi)表示。这里的影响指“正影响”和“负影响”,分别规定为1和-1.

得到若干个四元组以后,我们需要对 x x x坐标进行排序,那么我们得到了一个 x x x坐标递增的“竖线”。枚举每一个四元组,若当前的影响为正,则令 c [ k ] ( k ∈ [ y 1 , i , y 2 , i ) ) c[k](k∈[y_{1,i},y_{2,i})) c[k](k

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值