bitset分块维护可行集+bitset取w位单独计算+后缀分块判定最值——[省选联考 2025] 追忆 题解
bitset分块维护可行集+bitset取 \(\omega\) 位单独计算+后缀分块判定最值——[省选联考 2025] 追忆 题解.md
首先是可达的限制,这个非常简单,由于图不变,一开始搜索一次可以 bitset 预处理出来,\(x\) 可以到的点的集合记作 \(to_x\)。所以说这道题看似是一个图上问题,但根本没有利用任何图论性质与算法。
然后考虑满足 \(a\) 的限制,\(C=\{i|a_i\in[l,r]\}\implies C= \{i|a_i\ge l\}\setminus \{i|a_i>r\}\),即拆成两个后缀和,令 \(A_x=\{i|a_i\ge x\sqrt n\}\),那么可以用 \(\mathcal{O}(\frac nw)\) 的 \(A\) 异或处理出整块, \(\mathcal O(\sqrt n)\) 的处理出零散部分,最终算出 \(C\)。修改时暴力处理 \(\mathcal O(\sqrt n)\) 个 \(A\) 的值即可。
令 \(C'=C\cap to_x\),则 \(C'\) 即为限制集合。
现在考虑找到最大值,令 \(B_x=\{i|b_i\ge x\sqrt n\}\),则修改复杂度为 \(\mathcal O(\sqrt n)\),查询的时候维护一个 \(p\) 表示可能的最大值所在区间。
令 \(C'(x)\) 表示 \(C'\) 所压缩的第 \(x\) 个 ull,每次 \(C'(x)\cap B_p(x)\),
若 \(C'(x)\cap B_{p+1}(x)=\emptyset\),则 \(x+1\to x\) 因为 \(B\) 存储的后缀。
\(若 C'(x)\cap B_{p+1}(x)\ne \emptyset\),则 \(p+1\to p\) 因为找到了可行答案。
最后暴力扫描 \(\{i|b_i\in [p\sqrt n,(p+1)\sqrt n)\}\) 判断即可,复杂度为 \(\mathcal O(\frac nw+\sqrt n)\)。
| 判断求解答案 | 后缀分块 | 二分 | 倍增 | 逐位构造 | 枚举 | 扩展 | 
|---|---|---|---|---|---|---|
| 答案域行为 | \(\sqrt n\) 为步长从劣到优判断 | 只会依据判断结果选 \(\log\) 的答案判断 | 1. 从小到大不断增加步长 2. 从大到小不断较小步长 | 从大到小尝试答案的每一位 | 枚举所有答案 | 不断尝试扩展答案 | 
| 判断域行为 | 在保证各部分都有单调性的时候,可以仅使用一部分判断。要么舍弃这部分,要么将答案推进。 | 需要用所用数据得到一个明确的结果,且各次判断互相独立。 | 与二分类似。 | 尝试填下一位并计算答案,判定下一位能否填此数。 | 需要用所用数据得到一个明确的结果,且各次判断互相独立。 | 将已经算出的答案代入算法,进而判断是否可以再使答案+1 | 
| 复杂度 \(c\) 表示单次判断复杂度,\(V\) 表示答案域。 | \(\mathcal O((\sqrt V+f)c)\) 其中 \(f\) 表示拆分部分数 | \(\mathcal O(c\log V)\) | \(\mathcal O(c\log V)\) | \(\mathcal O(bc\log_b V)\) 其中 \(b\) 表示每位可能填的数的种数。 | \(\mathcal O(Vc)\) | \(\mathcal O(Vc)\) | 
| 推荐题目 | 本题(bitset 的 \(c=1\)) | P6619 冰火战士 | CF1848F Vika and Wiki | CF1712F Triameter | ||
| 备注 | bitset | 与线段树结构相吻合。 WQS二分 整体二分 | 但某些情况下好写且与树状数组结构吻合。 | 要求未确定的部分贡献可控。且一般用于:二进制最值,数位DP,字符串第 \(k\) 大。 | 答案域较小 | 答案域较小 | 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号