一种简易树分块
upd:
top cluster 树分块由于其复杂性和常数较大的原因,使用起来比较麻烦。
这里给出一种平凡的简易树分块。
设块长为
- 初始存在点集包含整棵树。
- 取出点集中子树大小
size 最大的点x 。 - 若
size_x > B ,则删除点集中被包含在x 的子树中且距离x 不超过B 的点。显然,这里标记\Omega (B) 个点。然后将x 加入另一点集S 。 - 若
size_x \le B 或点集为空,终止该过程。
显然,上面得到
最终的树分块结构即为点集
显然有以下性质:
- 每个点最深的为关键点的祖先距离其距离为
O(B) 。 - 每个关键点到其最深的为关键点的祖先距离之和
O(n) (虚树链不相交)。
链上数颜色
预处理两两关键点之间的答案,
考虑
枚举
考虑虚树的特性,
取
链上逆序对
为了使题目更加简洁,令边带权而并非点带权。
和序列上完全一致。令
除了前缀和变成了树上的之外,没有任何区别。