主席树求解的问题一般是区间历史求值的问题,即对一些点进行操作后,求其中一个版本的答案
最朴素的方法就是每一次操作都将原线段树复制一遍,但是这样很费空间,而且产生了大量无用的点
但是可以发现,每次修改时所走的路径其实只经过了根到对应叶子的 \(logn\) 个点,所以是否可以只对这些点建新树
大概就是这么个东西,可以发现,在这种情况下,每次修改只需要加入新的链就可以了
此时,每个节点不一定只有一个父亲,但是每个父亲至多有 2 个儿子,而且将每个根拎出来,都是一颗完整的线段树
所以只需要知道每个版本的根就能求解了
对于建树和储存,可以动态开点,根另开数组储存即可