const int M=3200;//M=N/32
struct Bitset
{
unsigned v[M];
void Reset() {for(int i=0;i<M;i++) v[i]=0;}//整体置0
void Set() {for(int i=0;i<M;i++) v[i]=-1;}//整体置1
unsigned Test(int x) {return v[x>>5]>>(x&31)&1;}//查找第X位的值
void Flip(int x) {v[x>>5]^=1U<<(x&31);}//翻转第X位的值
void Reset(int x) {if(Test(x)) Flip(x);}//将第X位的值置0
void Set(int x) {v[x>>5]|=1U<<(x&31);}//将第X位的值置1
int Count()//求bitset中1的个数
{
int ans=0;
for(int i=0;i<M;i++)
{
unsigned t=v[i];
while(t)
{
ans++;
t=t&(t-1);
}
}
return ans;
}
};
bitset模板
最新推荐文章于 2021-05-18 15:48:22 发布