扫描线算法在线段树中的应用

可能是没怎么搞计算几何的知识,至今对扫描线算法没有很清晰的认识,记得当初ZY大神是这样定义的:      

       每一个事件有一个开始时间和结束时间,将所有时间点排序,然后依次扫描,如果是开始时间就将时间加入,否则就将事件删除。则可以在任意时刻处理当前发生的事件。

扫描线在计算几何中使用相对多一些,我只是为了刷通线段树的列表粗略了了解了一下,只可就事论事,无法统筹全局。“矩形面积并”是扫描线与线段树结合的一个经典应用,同时也是区间离散化的一个经典例子。


矩形面积并平面上有N个矩形,各边均平行于坐标轴,求它们覆盖的总面积(重复覆盖的只计一次)。

解法:将矩形的竖边按照x坐标排序,每个矩形看做一个事件,矩形的左竖边看做事件的开始右竖边看做事件的结束,这样可以计算任意两条临边之间属于矩形并的面积(当前覆盖的纵坐标*横坐标差),过个图应该就可以理解了。。。

接下来就是区间离散化和维护统计量的过程了,离散化后横坐标有m个,如果建立m个节点那么线段树节点的长度无法计算(最简单的就是叶子节点,长度为0显然不对),因此线段树中建立m-1个叶子节点,第i个叶子节点代表i~i+1之间的距离(做到这里才知道当初对Poster那题的理解是一知半解的,不是半开半闭的问题而是节点保存什么信息的问题)。矩形面积并的线段树比较奇怪,虽然更新的是区间的值但是却不需要pushdown操作。而且更新自区间后也立即pushup(),线段树变化多端一定要灵活啊。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值