【详解】线段树扫描线

题目

「VOJ1056」图形面积

桌面上放了NNN个平行于坐标轴的矩形,这NNN个矩形可能有互相覆盖的部分,求它们组成的图形的面积。
【输入】
有多组测试数据。
每组测试数据输入第一行为一个数NNN,表示矩形的数量。
下面NNN行,每行四个整数,分别表示每个矩形的左下角和右上角的坐标,坐标范围为–108–10^810810810^8108之间的整数。
N==0N==0N==0时,测试文件结束。
【输出】
对于每个测试用例,在单独一行中输出一个整数,表示图形的面积。
【样例输入】

1
1 2 3 4
3
1 1 4 3
2 -1 3 2
4 0 5 2
0

【样例输出】

4
10

【数据范围】
对于50%50\%50%的数据,0<N<=1000<N<=1000<N<=100,每个测试点测试数据组数<=20<=20<=20
对于50%50\%50%的数据,坐标范围为–500–500500500500500之间的整数。
对于100%100\%100%的数据,0<N<=20000<N<=20000<N<=2000,每个测试点测试数据组数<=50<=50<=50,坐标范围为–108–10^810810810^8108之间的整数。

线段树扫描线

线段树扫描线就是用来解决图像面积并的问题。
例如存在下面三个矩形:
在这里插入图片描述
我们可以根据矩形的左右边界分成多个部分求解:
在这里插入图片描述
在这里插入图片描述
这些红色的线就称为扫描线

扫描线

从左往右扫过矩形左右边,每两条扫描线之间的面积总和就是图形面积。
每一段面积 = (覆盖扫描线上的长度和)*(与下一条扫描线的距离)。
可以发现,影响扫描线上的覆盖长度,只与矩形左右边相关,因此可以将图形简化:
在这里插入图片描述
构造一个四元组line(x,y,yy,flag)line(x,y,yy,flag)line(x,y,yy,flag),即结构体,来存在这些矩形左右边。
xxx:边的横坐标;
y,yyy,yyy,yy:边的两个端点,长度为yy-y;
flagflag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值