题目
「VOJ1056」图形面积
桌面上放了NNN个平行于坐标轴的矩形,这NNN个矩形可能有互相覆盖的部分,求它们组成的图形的面积。
【输入】
有多组测试数据。
每组测试数据输入第一行为一个数NNN,表示矩形的数量。
下面NNN行,每行四个整数,分别表示每个矩形的左下角和右上角的坐标,坐标范围为–108–10^8–108到10810^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–500–500到500500500之间的整数。
对于100%100\%100%的数据,0<N<=20000<N<=20000<N<=2000,每个测试点测试数据组数<=50<=50<=50,坐标范围为–108–10^8–108到10810^8108之间的整数。
线段树扫描线
线段树扫描线就是用来解决图像面积并的问题。
例如存在下面三个矩形:

我们可以根据矩形的左右边界分成多个部分求解:


这些红色的线就称为扫描线。
扫描线
从左往右扫过矩形左右边,每两条扫描线之间的面积总和就是图形面积。
每一段面积 = (覆盖扫描线上的长度和)*(与下一条扫描线的距离)。
可以发现,影响扫描线上的覆盖长度,只与矩形左右边相关,因此可以将图形简化:

构造一个四元组line(x,y,yy,flag)line(x,y,yy,flag)line(x,y,yy,flag),即结构体,来存在这些矩形左右边。
xxx:边的横坐标;
y,yyy,yyy,yy:边的两个端点,长度为yy-y;
flagflag


2744

被折叠的 条评论
为什么被折叠?



