树上分块.
考虑对树分块,限制块大小为 $\sqrt n$ .
加入一个点时,若它的父亲所在块大小达到了 $\sqrt n$ ,就给它新建一个块,否则将它加入父亲所在块.
对于每个块,用一个数组维护块内所有的权值,若有修改,直接将它重新 sort 一遍.
询问时,从 u 开始向下 dfs ,遇到 u 所在的块,暴力统计,遇到其他块,在维护的权值数组中二分即可算出贡献.
时间复杂度 $O(n\sqrt n \log n)$ .
1 | //%std |
夢はここに 思い出は遠くに
树上分块.
考虑对树分块,限制块大小为 $\sqrt n$ .
加入一个点时,若它的父亲所在块大小达到了 $\sqrt n$ ,就给它新建一个块,否则将它加入父亲所在块.
对于每个块,用一个数组维护块内所有的权值,若有修改,直接将它重新 sort 一遍.
询问时,从 u 开始向下 dfs ,遇到 u 所在的块,暴力统计,遇到其他块,在维护的权值数组中二分即可算出贡献.
时间复杂度 $O(n\sqrt n \log n)$ .
1 | //%std |