2023-07-09 开摆

注意到题意可以转化为每个区间的直径长度之和。

考虑分治,这样只要做二信息合并。直径可以用二元组 \((x,y)\) 表示。假设左边是 \((x_0,y_0)\),右边是 \((x_1,y_1)\),分类讨论并起来得到的是什么。

对左端点扫描线,把右端点按照合并后左端点提供几个元素分成三类,即合并提供 0/1/2 个元素。左端点扫描时,界点是单调的。因此维护界点是简单的。

现在考虑计算贡献,只有贡献一个元素的情况比较困难。这时的直径可以描述为两部分的半径之和加两中点之间的距离。半径可以预处理,中点的贡献可以转化成链加链查,这样就能做到 \(O(n\log^3 n)\) 了。

posted @ 2023-07-09 19:01  一般通过小萌新  阅读(96)  评论(2编辑  收藏  举报