#4867. tree2

题目描述

给定一颗 n n n 个点的树,每个点有个点权 h h h ,支持两种操作:

  • 操作 1   u   v 1~u~v 1 u v ,使 h u = v h_u=v hu=v ,保证此操作前 h u ≤ v h_u \le v huv

  • 操作 2   x 2~x 2 x ,询问保留所有权值大于等于 x x x 的点后整张图有多少个联通块。

数据范围

n , q ≤ 5 × 1 0 5 n,q \le 5 \times 10^5 n,q5×105 ,所有权值任何时候均在 [ 1 , 1 0 6 ] [1,10^6] [1,106] ,保证操作 1 1 1 中所有 v v v 单调递增。

题解

考虑答案是合法的点减去合法的边,边的权值为两个端点的最小值,考虑怎么维护边。对于每个点维护与它有连边且比它大的点,如果一个点被修改了,那就把比它小的点转移过去,并且修改一下这条边的贡献,这样均摊下来查找边的效率是 O ( n + q ) O(n+q) O(n+q) 的,所以就可以 O ( ( n + q ) log ⁡ w ) O((n+q)\log w) O((n+q)logw)

你可能感兴趣的:(性质,树状数组)