UOJ242 破坏蛋糕 计算几何、差分

传送门


把第\(n+1\)条直线作为\(y\)轴,那么对于\(y\)轴被分开的\(n+1\)段,一段在有限区域内的条件是它的左边和右边的块都是有限的。

对于左边和右边做法相同,我们只考虑右边。注意到\(y\)轴的某一段的右边的块有限,必须要满足这一段上方的一条直线和这一段下方的一条直线在\(y\)轴右侧存在交点,即这条直线的上方存在一条直线、下方存在一条直线,满足上方的直线的斜率比下方的直线的斜率要小。

不妨按照所有直线与\(y\)轴的交点将直线排序,按照交点从下往上加入直线的时候维护一个斜率递增的栈,每一次插入一条直线时在这个栈上二分得到截距最小的与当前直线在\(y\)轴右侧有交点的直线,那么这两条直线包含的\(y\)轴的若干段在右侧都是有限的。不难发现每一次是一段区间赋值,使用差分的方式维护即可。

代码

你可能感兴趣的:(UOJ242 破坏蛋糕 计算几何、差分)