位运算 如何 O(1) 区间取反

学术版

@[RAIN_PAIN_VAIN](/user/414912) 利用异或 比如你要对从右往左第 $a$ 位到第 $b$ 位取反,那就异或上```(1 << (b + 1)) - (1 << a)```(也就是第 $a$ 位到第 $b$ 位都为1)
by Karl_Aurora @ 2023-01-30 14:29:54


@[Karl_Aurora](/user/260061) 谢谢佬
by Althemeta @ 2023-01-30 14:32:10


@[Karl_Aurora](/user/260061) 那怎么$O(1)$查询区间1的个数呢,貌似只能$log n$
by Althemeta @ 2023-01-30 14:40:55


@[RAIN_PAIN_VAIN](/user/414912) 什么进制?
by Adchory @ 2023-01-30 14:43:03


@[Reimu_Hakurei](/user/590600) 二进制bin
by Althemeta @ 2023-01-30 14:43:37


`__builtin_popcount()` 貌似是 $O(1)$ 的。
by lfxxx @ 2023-01-30 14:45:49


lz题目是不是 P3870
by Mizuki_official @ 2023-01-30 14:52:05


@[lfxxx](/user/478461) P3870,这道题1e5个位,要用bitset,那么__builtin_popcount()就用不了了
by Althemeta @ 2023-01-30 14:53:01


@[jijidawang](/user/227514) 这又是神马奇技淫巧qwq
by Althemeta @ 2023-01-30 14:57:05


@[RAIN_PAIN_VAIN](/user/414912) `bitset` 有 `.count()` 函数,效果是返回 $1$ 的个数。区间计数也很简单,先左右移一下把不想要的部分挤出去就好了。
by wei_xin @ 2023-01-30 15:00:58


| 下一页