背景:
好久没有做扫描线的题目了。
题目传送门:
https://www.luogu.org/problemnew/show/P1856
题意:
给出
n
n
n个矩形,求组成图形周长。
思路:
你此时肯定在想:如果是面积不就是傻逼题目了吗。
确实是的。
现在是周长。
大佬(当然不是我):还是傻逼题。
确实是的。
定义长为
a
a
a,宽为
b
b
b,我们考虑
C
=
2
(
a
+
b
)
C=2(a+b)
C=2(a+b),
a
,
b
a,b
a,b是不会相互影响的。
因此我们考虑对于一个矩形分为长和宽分别处理。
扫描线很好的解决了这个问题。
首先我们考虑长。
首先套路就是升序啦。
若此时枚举的长为某一个矩形的下面,则你当前对周长的贡献就是
l
−
l
overlap
l-l_{\text{overlap}}
l−loverlap。其中
l
l
l为当前的这条线段的长度,
l
overlap
l_{\text{overlap}}
loverlap表示在操作前该区间已有线段的总长度。
若此时枚举的长为某一个矩形的上面。则删掉对应举行的下面。然后按照上面的操作更新贡献即可。
宽同理。
代码:
goto