又是一道能证明我是数据结构飞舞的题呢。
题目链接。
题意
给定一棵
现在有
第一种是修改操作,给定
第二种操作是给定一个点,查询这个点现在的点权。
题解
感觉是一眼根号分治,但是感觉难点在后面。
对于
考虑此时被影响到的深度,最多只有
那么薅出整棵树的 bfs 序。
对于一个点
这个性质是非常好的,说明此时的操作在 bfs 序上是至多
那么找到这些区间后,来一个
那么如何找到这些区间呢,考虑建一个新的森林出来。
点
; 且 最小。
人话就是说,如果
否则,
可以发现,这样从一个点
当然此时有可能跳到子树外面,所以还需要额外判一下。
所以直接对这棵树树剖,只需要
这样找到了左侧点,同样方法找一下右侧点即可。
对于
暴力一点,直接对所有
对于每一种
找到区间也是直接在上面那棵树上跳一跳就好了。
dfs 常数很大,可能需要改成递归形式。
复杂度
为啥我常数这么大啊日