以
记
那么记
首先我们可以通过调整法证明区间直径一定经过
,否则把其中一个端点换成 肯定不劣。 考虑每个
对答案的贡献:
- 若
,那么 ,那么 。 - 若
,那么只要考虑 的情形,否则 必定无贡献,由于 ,因此 ,所以 是 的祖先,因此 。 所以只要
, ,数学归纳法可以证明最大的 满足 。 证毕。
那么原问题就转化成了一个数据结构问题,自然的想法是考虑对
设当前节点为
我们只要求
假如
那么
但是此时
不妨假设
而
那么问题就变成了
离线这些问题后可以扫描线,单调栈+区修区查树状数组维护前缀最大值,可以
询问次数