记一种很新的 bitset

bitset 可以维护移位操作和或操作。

我们可以扩展他一下,变成值域为 \([0,2^k)\),然后可以维护位移操作和对位相加并对 \(2^k-1\)\(\min\) 操作。

具体来说,我们每个值用 \(k+1\)\(\text{bit}\) 表示,每次直接相加,然后把第 \(k+1\) 位或到前面再与掉。

例如说:

// here k=3 and a and b is unsigned long long
merge(a,b):
    a += b;
    a |= ((a & 0x8888888888888888ull) >> 3) * 7;
    a &= 0x7777777777777777ull;

复杂度 \(\dfrac {n\log k}\omega\) 每次操作。

posted @ 2025-09-15 15:35  CuteNess  阅读(4)  评论(0)    收藏  举报