#4867. tree2
题目描述
给定一颗 $n$ 个点的树,每个点有个点权 $h$ ,支持两种操作:
- 操作 $1~u~v$ ,使 $h_u=v$ ,保证此操作前 $h_u \le v$ ;
- 操作 $2~x$ ,询问保留所有权值大于等于 $x$ 的点后整张图有多少个联通块。
数据范围
$n,q \le 5 \times 10^5$ ,所有权值任何时候均在 $[1,10^6]$ ,保证操作 $1$ 中所有 $v$ 单调递增。
题解
考虑答案是合法的点减去合法的边,边的权值为两个端点的最小值,考虑怎么维护边。对于每个点维护与它有连边且比它大的点,如果一个点被修改了,那就把比它小的点转移过去,并且修改一下这条边的贡献,这样均摊下来查找边的效率是 $O(n+q)$ 的,所以就可以 $O((n+q)\log w)$ 。