天天看點

更快更好的bitset(quick bitset)

功能:

​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;
      

鳴謝