bitset 矩阵转置求和 trick
问题:给定 \(n\) 个 长度为 \(m\) 的 bitset,对于每个 \(1\le i\le m\),求有多少个 bitset 的第 \(i\) 位为 \(1\)。
考虑如下算法:
分治,记当前分治区间为 \([L, R]\),我们目标求出 \(\lfloor \log_2 n \rfloor + 1\) 个 bitset,这些 bitset 的第 \(i\) 位一起表示 \(L\sim R\) 的 bitset 的第 \(i\) 位为 \(1\) 的个数 的 二进制。
考虑合并两边,就是二进制下的加法模拟,用 bitset 的异或和按位与可以做完。
时间复杂度:\(T(n) = 2T(n / 2) + O(\frac m {\omega} \log n) = O(\frac {nm} {\omega})\),使用主定理可得。

浙公网安备 33010602011771号