树上点对距离问题中,为了去重,有的算法会在子树中减去重复数量。
形式化的,设当前分治树根为 T ,T 的直接子结点树为 T1,T2,T3,…,Tm 。
f(x,y) 计算当前分治树根意义下,以 x 为根的树中过 x 且长度 ≤y 的点对路径数。
g(x,y) 用尺取法计算当前分治树根意义下,以 x 为根的树中满足 dis(x,s)+dis(x,t)≤y 的点对 (s,t) 数量,即不限制点对在同一个子树中的 f。
则 f(T,k)=g(T,k)−Σi=1mf(Ti,k−2dis(T,T−i))
如果不考虑去重问题,算法的主要复杂度在排序上,复杂度上界为
O(n∗logn+2∗2n∗log2n+4∗4n∗log4n+...+n∗nn∗lognn)
=O(n∗Σi=0log2nlog2in)
=O(n∗Σi=0log2ni)
=O(n(logn)2)
f 的是否会导致复杂度超过 O(n(logn)2) ? 求证明。