社区讨论
给孩子们一个手写的bitset快多了
P11831[省选联考 2025] 追忆参与者 5已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @miykrqok
- 此快照首次捕获于
- 2025/12/09 20:47 2 个月前
- 此快照最后确认于
- 2025/12/12 18:40 2 个月前
CPP
struct bitst {
static constexpr int SZ = SIZ;
alignas(32) u64 a[SZ];
void reset() {
memset(a, 0, sizeof(a));
}
void set(int x) {
a[x >> 6] |= 1ull << (x & 63);
}
void flip(int x) {
a[x >> 6] ^= 1ull << (x & 63);
}
int val(int x) {
return (a[x >> 6] >> (x & 63)) & 1;
}
void operator|=(const bitst &b) {
for (int i=0;i<SZ;i+=4) {
__m256i x = _mm256_load_si256((__m256i*)(a+i));
__m256i y = _mm256_load_si256((__m256i*)(b.a+i));
__m256i z = _mm256_or_si256(x,y);
_mm256_store_si256((__m256i*)(a+i),z);
}
}
void operator^=(const bitst &b) {
for (int i=0;i<SZ;i+=4) {
__m256i x = _mm256_load_si256((__m256i*)(a+i));
__m256i y = _mm256_load_si256((__m256i*)(b.a+i));
__m256i z = _mm256_xor_si256(x,y);
_mm256_store_si256((__m256i*)(a+i),z);
}
}
void operator&=(const bitst &b) {
for (int i=0;i<SZ;i+=4) {
__m256i x = _mm256_load_si256((__m256i*)(a+i));
__m256i y = _mm256_load_si256((__m256i*)(b.a+i));
__m256i z = _mm256_and_si256(x,y);
_mm256_store_si256((__m256i*)(a+i),z);
}
}
};
这是 gpt 写的,实测快多了。
回复
共 7 条回复,欢迎继续交流。
正在加载回复...