扫描线算法流程:
1、想象一下有一条平行于y轴的直线,正在从左边缓缓向右平移……
2、再想像一下y轴上有一棵线段树,它记录的是y轴上每个点的覆盖次数
3、每当遇到某个矩形的某一条边时,就计算面积——用这次碰边的x坐标减去上一次碰边时的x坐标,再用这个差值乘以当前y轴上有多少个点被覆盖
4、当这条直线遇到某个矩形的左边时,将这个矩形的左边所对应的y轴区间的覆盖次数+1,当遇到某个矩形的右边时,就相应的-1
5、让这条线继续向右移动……
然后我的这个板子不采取离散化的原因是因为我魔改了线段树,普通的线段树是维护的连续的点,而我的这个线段树维护的是真正的“线段”
板子题:https://www.luogu.org/problem/P5490
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include <string>
7 #include <string.h>
8 #include
9 #include
板子题:
https://vjudge.net/contest/332656#problem/K
题意:
二维平面有n个平行于坐标轴的矩形,现在要求出这些矩形的总面积. 重叠部分只能算一次.
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include <string>
7 #include <string.h>
8 #include
9 #include