2023-07-09 开摆
注意到题意可以转化为每个区间的直径长度之和。
考虑分治,这样只要做二信息合并。直径可以用二元组 \((x,y)\) 表示。假设左边是 \((x_0,y_0)\),右边是 \((x_1,y_1)\),分类讨论并起来得到的是什么。
对左端点扫描线,把右端点按照合并后左端点提供几个元素分成三类,即合并提供 0/1/2 个元素。左端点扫描时,界点是单调的。因此维护界点是简单的。
现在考虑计算贡献,只有贡献一个元素的情况比较困难。这时的直径可以描述为两部分的半径之和加两中点之间的距离。半径可以预处理,中点的贡献可以转化成链加链查,这样就能做到 \(O(n\log^3 n)\) 了。