线段树合并杂题

按照 这个题单 做的。

有一些单独发了题解(前三题浓缩在了我的一篇文章中),在这里就不说了。

准备填坑。 准备没事做了再打,因为感觉它们思路简单却代码长,懒啊……

如果有什么建议请在评论区纠正我,感谢!

rot-tree (已做)

给每个点创造一个权值线段树。点 $o $ 的线段树代表以 (o) 为根的子树的树,有哪些值。

假设现在我们在线段树合并阶段,对于一个点,设它的两个儿子是 (o1)(o2)(o1)(o2) 的线段树中的点 (lsim r),它的逆序对个数是多少?我们这样讨论:

  1. 左子树的贡献
  2. 右子树的贡献
  3. 跨过左右子树的贡献

对于1和2,我们递归求解。对于3,因为是权值线段树,左边子树的值域肯定比右边子树的值域小,所以乘起来就是贡献。即,如果不交换左右子树,贡献就是 ans1=tre[ o1右儿子 ].val X tre[ o2左儿子 ].val,交换同理,贡献为 ans2=...。合并完后,线段树合并到它们那和蔼可亲的父亲。ans1和ans2要取个min,加到总答案中。

谈笑风生 (未做)

点 $o $ 的线段树代表以 (o) 为根的子树中的节点,深度是多少。然后对于点 (o) 的询问,query(dep[o],dep[o]+k),以及fa=o的kth祖先;query(fa,fa[o]+k)。然后记得加上 (c) 的贡献。

Dominant Indices (已做)

同blood cousins,线段树多记一个最大值。

注意细节。。。这里存的是无向边,blood cousins存的是有向边,坑杀我也!

Tree Requests (未做)

值域线段树?可能要边合并边处理……还没想好。但是回文串的条件是至多只有一种字母是出现奇数次的。

看了题解是 (2^{26}) 状压

原文地址:https://www.cnblogs.com/BlankAo/p/14015551.html