Loading

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\) 大。 答案域较小 答案域较小
posted @ 2025-05-07 16:31  lupengheyyds  阅读(33)  评论(0)    收藏  举报