线段树合并杂题
按照 这个题单 做的。
有一些单独发了题解(前三题浓缩在了我的一篇文章中),在这里就不说了。
准备填坑。 准备没事做了再打,因为感觉它们思路简单却代码长,懒啊……
如果有什么建议请在评论区纠正我,感谢!
rot-tree (已做)
给每个点创造一个权值线段树。点 $o $ 的线段树代表以 \(o\) 为根的子树的树,有哪些值。
假设现在我们在线段树合并阶段,对于一个点,设它的两个儿子是 \(o1\) 和 \(o2\) 。 \(o1\) 和 \(o2\) 的线段树中的点 \(l\sim r\),它的逆序对个数是多少?我们这样讨论:
- 左子树的贡献
- 右子树的贡献
- 跨过左右子树的贡献
对于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}\) 状压