一、问题
树状数组是类似线段树的一个数据结构,支持单点修改、查询,区间修改、查询等操作,当你用查分TLE时,你就可以用树状数组解决。二进制有很多奇妙的应用,这里介绍其中非常经典的一个,也就是 lowbit 运算,即lowbit(x)=x&(-x)。
那么这个式子是什么意思呢?先来看 -x 从二进制的角度发生了什么。
由计算机组成原理可以知道,整数在计算机中一般采用的是补码存储,并且把一个补码表示的整数 x 变成其相反数 -x 的过程相当于把的二进制的每一位都取反,然后末位加 1。
而这等价于直接把 x 的二进制最右边的1左边的每一位都取反。
如上图所示,对 x=(0000001101001100) 来说,最右边的 1 是在 2 号位,因此把它左边的所有位全部取反,于是有 −X=(11111100101