功能:
change()
修改某一位置上的值 \(\Theta(常数)\)
find()
查找某一位置上的值 \(\Theta(常数)\)
set()
全部修改为某个值 \(\Theta(大小)\)
count()
查找某个值的个数 \(\Theta(1)\)
代码:
template <size_t cap>
struct qkbitset{
unsigned int B[(cap>>5)+1];int cnt;
inline void change(int p,int v){
int add=p&31;p>>=5;
if(!v&&B[p]>>add&1) B[p]-=1<<add,--cnt;
if(v&&!(B[p]>>add&1)) B[p]+=1<<add,++cnt;
}
inline bool find(int p){return B[p>>5]>>(p&31)&1;}
inline void set(int v){memset(B,v?0xff:0,sizeof(B)),cnt=v*cap;}
inline int count(int v){return v?cnt:cap-cnt;}
};
qkbitset<1000000000> s;
鸣谢