一些好用又好玩的点子

1、当你想要保证每个点只被覆盖一次……

直接用 vis 数组是不行的
因为每个点的 vis 被修改过一次,每次被修改都会有n次操作……

所以可以用“链表(Cyber_Tree语)”“并查集(Rings语)”优化修改过程,使每次操作完一个数就跳过这个数。

要我起个名字的话,就叫他“过河拆桥”吧。。。

例题1(内部题目)
例题2

大体思路:

每个数 \(i\) 记录一个 \(nxt_i\) ,表示这个数之后下一个未被修改的数的位置。

每次从 l 到 r 修改后,对于所有 \(i\in[l,r]\) ,新的 \(nxt_i\) 赋值为 \(\max(nxt_i,nxt_r)\)

这样的话,每次操作完 i 后,下一次跳到 \(nxt_i\) 操作即可。

顺便也保证了每个点只被经过一次。

(但是好像在边界还有点锅,竟然得加 vis 数组)