Loading

更快更好的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;

鸣谢

@王熙文,他的参考文章

posted @ 2021-11-02 21:01  Quick_Kk  阅读(48)  评论(0编辑  收藏  举报