点分树模版题(理解题?)
询问距离$x$点距离不超过$k$的点的价值总和
把$x$点的价值变成$y$
当我们在修改某个点的时候,是要影响到自己的父亲。如果一层一层跳,如果是一条链复杂度可想而知,但是根据点分治的子树性质,最多$\log$层。
然后用一个数据结构维护每颗子树。(每个点最多出现在所有子树里,那么需要的数据结构容量也是$n\log n$级别。
此题考虑用线段树维护即可
- 需要注意对于统计父亲结点的维护的结构时,可能会重复计算儿子,那么$tree2[u]$维护的是,在点分树下$father[u]$往$u$这个方向,深度的价值和。统计时根据情况剪掉这颗子树
- 由于复杂度$O(q\log^2n)$,需要注意常数的优化。
- 根据$maxdep[u]$,动态开点线段树。
- 处理$LCA$,使用$ST$表法
- 点分治不使用“假算法”,也方便统计。
代码
1 |
|