树上路径第k大
x的主席树+y的主席树-lca(x,y)的主席树-fa[lca(x,y)]的主席树。
例题A
用线段树存储左边,有边,总答案,上升和下降都要维护。
对于节点向上跳的操作,注意正向的维护上升,逆向的维护下降即可。
例题B
用线段树维护最左第一个,最右第一个,然后用树链剖分维护即可。
例题C
如果是一个序列问题,第二个序列的数字变成第一个序列中出现过的位置。每次查询两个区间,只要找第二个序列的询问区间中,数值范围在第一个询问区间的数字有多少。
用主席树维护。
转化到树上,我们可以把第二个数的点权转化为第一个数在dfs序上的位置。
显然第一课数通过树链剖分可以划分成不超过log_n个区间,可以直接在第二课数的主席树上查询即可。
例题A
。。。
例题B
统计每一个点的点权和and最大值,然后将点权和存进数组里。
然后按照点权最大值的路径进行排序,然后根据排序去进行统计即可。