树上主席树(无代码,单纯谈思路的一篇水文)
连标题都不想搞了,单纯的记录一下树上主席书的学习过程。
这个可以干什么呢?快速的找到一条路径的的信息。
思路:\([x]\)表示根节点到\(x\)路径上的点的信息的主席树,构建方式为每个点建链,从上至下合并,即\(merge([x],[fa[x]])\)即可。
然后路径的主席树则为:\([x]+[y]-[lca(x,y)]-[fa[lca(x,y)]]\)。
事实上:之前的肥宅快乐主席树好SB的名字的树上第k小练习就是如此。
当然,还有一道练习:[SCOI2015]情报传递,也可以用树上主席树做。
为了不太水,聊聊带修改的问题?
额,口胡一个吧,考虑\(DFS\)序,即进去放一次,回溯放一次的数组,这样每个点会在数组中出现两次,然后不难发现,前面一次为+,后面一次为\(-\),\([1,i]\)刚好就是\(i\)到根节点的信息,然后转化为序列的带修改,然后类似维护即可。