洛谷 P3273

题意直接看 原题 吧。

注意 \(-1000 \le v \le 1000\)

这种连边的操作很容易让人想到 DSU,再一看,使用 DSU 对于每个连通块开个 set 维护最大值,整体再开个 set 维护全局最大值,不难搞出 \(O(n \log ^2 n)\) 的做法,需要卡常才能过(想进办法减少 seterase/insert 的次数。)

但是有更简单的做法。(不会左偏树。)似乎可以使用线段树合并代替 set,而不是启发式合并,然后可以做到 \(O(q \log v)\) 的复杂度。

另一种写法是离线下来,整个并查集是棵树,那么每个节点(一个连通块)在 dfs 序上就是一个区间,然后就可以线段树做了。(把每个点映射成 dfn[u],然后在合并时就是区间操作了。)

非常棒的题,最后一个做法将利用并查集是的性质,将连通块原本不连续的编号变为连续的,然后转化为区间问题,奇思妙想。

posted @ 2025-11-03 22:31  xiehanrui0817  阅读(10)  评论(0)    收藏  举报