QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2025-12-12 23:28:53

Last updated: 2025-12-12 23:28:57

Back to Problem

题解

从左往右扫描线,在每个圆的左端点处加入,右端点处删除。加入圆时,从它的左端点开始向和它 $y$ 坐标相邻的一个圆连一条竖直线。注意 $x$ 坐标相同时应该先加入再删除,并且同时加入的要特殊处理,防止连的线和其他圆相切。

现在我们形成了若干个 $x$ 坐标不相交的连通块,把相邻的连通块的最右端和最左端连起来即可。

还要注意题目要求输出的坐标范围在 $[0,10^9]$,其实我们只需强行让每个圆的左右端点在这个范围内即可(注意这个做法实际上对任何凸的图形都有效,限制范围相当于直接把圆切掉一部分)。

时间复杂度 $O(N\log N)$。

Comments

No comments yet.