Luogu P5617 [MtOI2019] 不可视境界线

非常好题目。DP 强行优化 \(O(n^3)\to O(n\log^2n)\)。实际上是把 \(O(nr\log n)\)\(O(nk\log n)\) 的两个 Subtask 结合起来得到正解。

具体来说就是:

  1. 优化转移,此题中代价函数带三角函数十分复杂,考虑尝试 决策单调性(求导 / 四边形不等式)
  2. 优化状态,此题中要求 (恰好)选 \(k\) 个圆 需要二维状态,考虑 wqs 二分 优化掉 \(k\) 这一维状态。

首先考虑 半径均为 \(r\),圆心均在 \(x\) 轴上的 \(n\) 个圆 的面积并如何速求。显然直接按圆心位置线性扫一遍,判定圆 \(i\) 与圆 \(i-1\) 的位置关系,再用弓形面积算出重合面积即可。以相交情况看,即:

\[d(i,j)=\dfrac{p_i-p_j}{2} \]

\[s(i,j)=r^2(\pi-2\arccos(\dfrac{d(i,j)}{r}))+2\cdot d(i,j)\sqrt{r^2-d^2(i,j)} \]

相离和包含情形是简单的。然后就可以进行简单的 \(f_{n,k}\) DP,\(O(n)\) 枚举上一个转移,复杂度是 \(O(n^3)\) 的。但实际上跑不过去这一档分。

CAUTION: 三角函数常数巨大 的。这里可以发现相交时才需要计算,这时显然有 \(d(i,j)\in(0,r]\) 且为 整数,所以可以 \(O(r)\) 预处理 所有 \(\arccos(\dfrac{x}{r})\) 的值,可大大减小常数。

可以发现这个代价函数 \(s\) 是一个很难优化转移的形式。可以意识到类似的问题也出现在 \(s\) 为难于分离 \(i,j\) 的高次函数的情况下,这时候 决策单调性 的方法常用。

若考虑求导,此题中 \(s\) 看起来可导,求出来二阶导数确实是非负的,因此 \(s\) 具有凸性,可以用决策单调性优化。但是显然过于难算,并不实用。

因此考虑证明 \(s(i,j)\) 满足四边形不等式。这个直接回归几何意义(圆的交)分类讨论即可。

于是用 分治二分队列 求解。可以做到 \(O(n^2\log n)\)


现在转移可以做到均摊 \(O(\log n)\),但是状态数始终是 \(O(nk)\)\(k\le n\le 10^5\)。所以必须优化掉 \(k\) 这一维,也就是去掉 恰好选出 \(k\) 的限制,使用 wqs 二分。

Proof:显然 \(k\) 这一维上的 \(f_{n,k}\)的。几何意义亦可证明。

套路地,每次额外给 每选出一个圆 加上一个贡献 \(mid\) 即可。

\[f_i=\max(0,mid+\max_{k=1}^{i-1}f_i+s(k,i)) \]

同样可以用决策单调性优化 \(\max_{k=1}^{i-1}f_i+s(k,i)\) 的转移。

最终复杂度 \(O(n\log n\log k)\)

posted @ 2023-10-29 14:30  音街ウナ  阅读(42)  评论(0)    收藏  举报