CF911G Mass Change Queries

发布时间 2023-11-01 20:36:59作者: 谭皓猿

CF911G Mass Change Queries

题解

首先这题有一个很一眼的分块做法,并且由于只需要维护颜色,所以会极其好写。
对每个块维护并查集,表示整块中颜色变成了哪个颜色,每个位置单独也指向一个颜色表示最初指向哪个颜色,这样就很好维护了。

但是发现值最大只有 \(100\),所以考虑和值相关的做法。

有两种做法,挺不错的。

第一种做法比较暴力,对线段树每一个节点维护 \(100\)\(tag\) 就行了,常数巨大。

第二种做法很有意思。
对每个值都开一颗线段树,表示某一个位置上面有没有。
然后修改就是取出 \(x\)\(l\)\(r\) 的节点,合并到 \(y\) 相同值域的位置上去,然后再删掉 \(x\) 上相对应的节点。
也就是说其实线段树单独的一个节点也是能合并的,跑得很快。