需要查询 bitset 里面为 1 的位置对应的 b 的最大值,一个一个枚举显然不行,那就手写bitset,对于每 w 个 bit 组成的 unsigned long long,在里面二分最大值,这样每次查询一个 w 集合的最大值的复杂度就能做到 O(\log w)。
这要求在修改 b 的过程中维护每个 w 集合里面对应位置的第 1\sim w 大的 b 值,那么每次修改 b 就是 O(w) 的,套在莫队里显然不行,所以先预处理,在一开始就把每次修改后 b 对应的 w 集合直接存下来,然后再开一个数组维护每个 w 集合对应的版本编号,莫队里修改 b 的时候直接修改对应的版本编号就可以做到 O(1) 了。