QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2025-12-14 06:59:24

Last updated: 2025-12-14 06:59:52

Back to Problem

题解

先考虑算只能删一个点的答案。显然删的点一定在凸包上。考虑枚举删的点 $p$,它在凸包上前后分别为 $p_l,p_r$,那么只需要对三角形 $pp_lp_r$ 内的点(包括 $p_l$, $p_r$ 但不包括 $p$)算凸包周长。注意到每个点只会在 $O(1)$ 个这样的三角形内,因此这样做的复杂度是 $O(n\log n)$ 的。

回到原来的问题,删两个点的情况有以下几种:

  • 删凸包上不相邻的两个点。这时周长减小的值就是两个点分别减小的值的和,算出删每个点的答案后可以 $O(n)$ 求出来。
  • 删凸包上相邻的两个点。这个和删一个点是类似的,同样每个点只会出现在 $O(1)$ 个区域内,暴力算仍然是 $O(n\log n)$。
  • 删掉凸包上的一个点之后在凸包上新加的点中再删一个。既然我们已经求出删掉每个点之后三角形区域内点的凸包,那只需要每个凸包再算一遍只删一个点的答案即可。

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

Comments

No comments yet.