记一种很新的 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\) 每次操作。
本文来自博客园,作者:CuteNess,转载请注明原文链接:https://www.cnblogs.com/CuteNess/p/19093072

浙公网安备 33010602011771号