浅谈一类覆盖与遍历问题
Butterfly_qwq · · 算法·理论
我们现在有一个数列,初始全为
单
考虑倒序处理,这样我们把覆盖问题变成了遍历问题,问题就类似于求的是将这个序列每次选择一个区间进行遍历,最后问每个数是第几次遍历到的。
这个问题可以简单地用并查集维护,你可以看上一篇文章的最后一块,
现在,如果这个问题扩展到二维了,我们该怎么办?
答案是这道题根本做不了优于双
不过,对于一些特殊的情况,我们会有一些特殊的处理方式。
问题如下:
我们现在有一个矩阵,初始全为
然而由于矩阵可能很大,所以我们每次询问一些点,求这些点的值。
树套树容易做到双
还是倒序转成遍历,我们注意到点数是
那么我们肯定可以转化成一个序列,然后就类似于将
这里有三种做法,主席树,CDQ 分治,还有线段树配合 set。
先说说主席树。考虑直接顺着序列枚举下去,每次你相当于对一个版本的线段树进行一个区间遍历,这个可以直接再倒序回来然后线段树,也可以并查集不过就没有任何意义了,因为可持久化并查集和主席树复杂度一样,然后再把现在遍历到的新点插入到一个新的版本的线段树就行了。
再说说 CDQ,对最开始那个序列分治下去,统一处理
最后说说线段树配合 set,常数最小,甚至空间线性。假如我们现在遍历到第
例题是这道,建图,做费用流,你会发现边太多了,用任意一种优化即可。