将题目的要求形式化得到:
i=1maxnj=imaxndis(i,j)
化简得到:
i=1maxnj=imaxndep(i)+dep(j)−2×dep(lca(i,j))
那么根据欧拉序求 lca 的思想,我们可以得到:
dep(lca(i,j))=k=min(Li,Lj)minmax(Ri,Rj)dep(k)
发现在第 2 个式子中 dep(lca(i,j)) 的系数是 −2,那么如果根据第 3 个如果取到的在区间内的不是 lca,那么在第 2 个式子中一定是不优的。同样的,如果取值的范围小于第 3 个式子的范围,那么取值也肯定没有上后优。
以 a 命名在将这棵树的欧拉序处理出来之后,在欧拉序对应的位置放上 dep 进行替换编号形成的序列,那么题目求解的实际上就是:
max{ai−2×aj+ak∣i<j<k}
考虑使用线段树合并进行维护,时间复杂度为 O(nlogn)。