T696211 超纲
这种递推只能考虑矩阵快速幂,于是推出矩阵和函数的对应关系:
\[f(x)=G^{x-1}_{1,1}
\]
那么考虑 \(f(a_x-a_y)\) 如何拆分,则有:
\[f(a_x-a_y)=G^{a_x-a_y-1}=G^{a_x}(G^{-1})^{a_y+1}
\]
由于 \(G\) 是一个 \(2\times 2\) 的矩阵,那么对于 \(G^{-1}\) 可以自己手解方程推出,则设其为 \(F\)。那么考虑到 \(i\) 的孩子 \(v\),设之前已经访问过的子树集合为 \(T_i\),则对答案有贡献:
\[G^{a_x}\sum_{x\in T_v,y\in T_i,a_x>a_y} F^{a_y+1}+F^{a_x+1}\sum_{x\in T_v,y\in T_i,a_x<a_y}G^{a_y}
\]
我们发现如果不去枚举 \(x\) 的话很难做,那么考虑树上启发式合并,则我们可以枚举 \(x\) 了。那么对于求和部分,发现可以直接将矩阵挂到线段树上。我们开 \(n\) 颗线段树,之后不需要合并,而是因为我们使用了启发式合并,可以直接一个一个加入。为了防止空间爆掉采用一下垃圾回收。之后发现如果直接挂到线段树上则值域是 \(\log V\) 的。但是我们发现对于一个点 \(u\),它的 \(F,G\) 贡献是定的,且我们在查询的时候只关心它的大小关系,那么我们可以离散化掉 \(a\),复杂度就转成了 \(O(n\log^2n)\)。

浙公网安备 33010602011771号