关于bitset

bitset 的用法

bitset 是一个存 0/1 的大小不可变的容器,它的空间效率和时间效率极其快,快 32 倍,所以会被用于一些暴力优化成正解。

个人的理解,这个东西把一大堆压到了一块,相当于一个小分块,所以才变快了,手写一个也就是把一个 ull 当作 64 个位置存。

记一下这个玩意的用法吧。

声明

声明也就很简单。

点击查看代码
bitset <MN> s;

别忘了这个是固定大小的。

访问,修改

支持下标访问

点击查看代码
s[0]=1;
cout<<s[114514]<<'\n';

这个东西也支持各种各样的位运算。

点击查看代码
s<<=x;
s>>=x;
s&=s1;
s|=s1;
s^=s1;

这基本上就够用了。

一些函数

这边仅仅写一些自认为有用的。

重置用 reset, 全都便成 0。

点击查看代码
s.reset();

大规模设置用set, 第一个参数是 pos, 第二个参数是 val;

如果什么都不传默认把所有的位置都设为 1, 时间复杂度 \(O(\frac{n}{w})\)

点击查看代码
s.set();
s.set(1);
s.set(1,0);

any 如果存在1就返回 true;

点击查看代码
cout<<s.any();

none 如果都是 0 返回 true。

点击查看代码
cout<<s.none();

all 如果全部都是 1 则返回 true。

点击查看代码
cout<<s.all();

count 返回 1 的个数

点击查看代码
cout<<s.count();

flip 对每一位取反,如果加上 pos 就是这一位。

点击查看代码
s.flip();
s.flip(1);

_Find_first 会返回第一个 1 的位置,不存在返回大小。

点击查看代码
cout<<s._Find_first();

_Find_next 返回位置严格大于 pos 的第一个 1 的位置。

点击查看代码
cout<<s._Find_next(1);
posted @ 2025-08-22 16:43  BaiBaiShaFeng  阅读(9)  评论(0)    收藏  举报
Sakana Widget右下角定位