给学弟的bitset使用整理

Bitset就是一个01串,空间为bool的八分之一

每一位占有一个bit,支持数组式单点修改,左右位移,位运算等操作

时间复杂度   单次操作时间复杂度为O(n/w),w为计算机字长(一般为32或64)

 

声明             bitset<maxn> now;

支持初始化   bitset<maxn> now(string("00110101"));

内部下标零开始,从右向左记录,初始化后将字符串记录到最右侧,左侧不足的补零

 

单点修改       s[pos] = x;

左移              s << x;

支持              <<=和>>=

支持与、或、异或运算  & | ^

成员函数

.reset()           集合内元素全部清零

.set()              集合内元素全部置1

.set(pos)        从右往左pos位置改为1    单点操作O1

.set(pos,v)      从右往左pos位置改为v//只能是1/0

.test(pos)       返回pos位置的值             单次操作O1

.any()      返回一个布尔量 若内部存在一位值为1,返回true

复杂度同上

.none()   返回一个布尔量 若内部存在一位值为0,返回true

 

.count()  返回一个bitset1的个数  O(n/w)

.flip()       所有元素按位取反

 

.flip(x)     对第x位取反

 

例题 

没有传送门。。。自己搜一下

 

莫队 + bitset 

洛谷 人渣的本愿 

 

01背包 bitset优化

bitset<maxn>b;

       cin>>n;b[0]=1;

       for(int i=1;i<=n;++i){

              cin>>a[i];

              b|=(b<<a[i]);

       }

       此时 b[ x ] 可以检验 x 大小 的 容量的背包是否被填满

洛谷 三维偏序 

(这个我也不太会

 

bitset 优化线段树

数学家的谜题 

 

储存状态

可以用bitset存一些比较大的状态,查询修改也比较快

牛客之前写过一题,但是我找不到了,太久了

 

支持与、或、异或运算

 

posted @ 2021-11-15 10:48  PdrEam  阅读(214)  评论(0编辑  收藏  举报