HDU---1255:覆盖的面积【矩形面积并】

该博客介绍了如何利用扫描线算法和线段树解决计算多个与轴平行矩形覆盖面积的问题。通过排序横边、扫描线逐次计算覆盖长度,并用线段树维护当前覆盖状态,最后只考虑被覆盖两次及以上的区域。文章包括问题分析和具体代码实现。
摘要由CSDN通过智能技术生成

题意:

给出若干个与轴平行的矩形,求被覆盖了2次及以上区域的面积

分析:

简述扫描线算法:

 下图3个矩形共有6条扫描线,我们只需要计算出相邻两条扫描线之间的被覆盖的面积相加即可得到矩形的面积并,实现如下:

(1)对图中的每条横边(竖边也行)按它的高度从小到大排序

(2)从下到上依次扫描每条横边(即扫描线),计算当前扫描线覆盖的总长度,乘上与上一条扫描线之间的高度差即得到它们之间的被覆盖的面积

(3)第二条扫描线覆盖的长度=第一条横线的长度+第二条横线的长度,所以要用线段树维护当前被覆盖的总长度,当一个矩形的上边扫过后,那么它底边的贡献就没了,所以对每个矩形的底边标记为1,上边标记为-1,方便线段树维护

(4)涉及到线段树,一般需要离散化坐标,同时将边权转化为点权

 对于此题,只需要每次计算当前被覆盖2次及以上的线段长度即可

代码:

#include <bits/stdc++.h>

u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值