1.位运算的常见函数
__builtin_popcount(x) //x二进制内1的个数(unsigned int)
__builtin_popcountll(x) //longlong版本
__builtin_parity(x) //二进制下的1的个数的奇偶性
__builtin_parityll(x) //long long版本
__builtin_ctz(x)//x二进制末尾0的个数
__builtin_clz(x)//x二进制开头0的个数
log2(x)=31-__builtin_clz(x);
以上函数的时间复杂度均为o(1)
2.bitset中常见的东西
bitset<1000>a;//长度为1000的bool数组
访问的话必须强转为int类型
比如(int)a[0],(int)a.any(),(int)a.count;
a.any();//判断存不存在至少一个1
a.none();//是不是全都是0
a.count();//统计这里面有几个1
a.set();//把所有数位都变成1
a.set(x);//把第x位变成1
a.reset(x);//把第x位变成0
a.reset();//把所有位变成0
找到第一个1的位置,和下一个1的位置