bitset学习笔记
bitset 本质上是一个二进制串,优点是时间和空间复杂度都带有 \(\frac{1}{w}\) 的常数。
成员函数:
b.set()
全部赋值为 \(1\)。b.reset()
全部赋值为 \(0\)。b.flip()
将每一位取反。b.count()
返回有多少个 \(1\)。b.any()
返回是否至少有一个 \(1\)。b.none()
返回是否全部为 \(0\)。
每个函数的复杂度都是 \(O(\frac{n}{w})\),其中 \(n\) 为 bitset 的长度,而 \(w\) 则是常数 \(32\) 或 \(64\)(不同环境下)。
bitset 支持按位与,按位或,按位异或,按位取反,左移右移,时间复杂度同样为 \(O(\frac{n}{w})\)。
技巧:
- 将 b 的 \(0 \sim x\) 位变为 \(0\):
b = (b >> x) << x;
- 只取 b 的 \(0 \sim x\) 位(\(N\) 为 bitset 总长度):
b = (b << (N - x)) >> (N - x);
应用: