凸包绕着点 $p_i$ 旋转时,对上包络产生贡献的一定是凸包上距离 $p_i$ 的最远点 $q_i$。通过 SMAWK 线性求出凸包上每个点的最远点。
模拟旋转的过程,发现每对最远点 $p_iq_i$ 扫过的区域受到凸包上相邻的两条边产生的角度限制。我们不加证明地给出以下结论:旋转扫过的面积和直接在 $x$ 轴上放置半圆盘的并集面积是等价的,即忽略角度限制不影响答案。
问题转化成求圆盘的并,这是一个一维的 Power Diagram(见 QOJ 6612),把圆 $C:((x_i,0),r_i)$ 映射到 $(x_i,x_i^2-r_i^2)$ 求出下凸壳,只有凸壳上的点会对面积产生贡献。求出每个圆在凸包前后相邻圆的交弦即得到积分的区域,直接计算面积。
有一个 corner case 是不能随意选取一段长度为 $n$ 的圆求并,因为一个周期中的圆可能会扫到下一个周期内。记凸包的周长为 $D$,一个解决方案是把 $n$ 个圆分别按照 $-D/0/D$ 平移成 $3n$ 个圆,然后在 $[0,D]$ 上求并集。
时间复杂度 $\mathcal{O}(n)$,目前是最优解。