P7906 [Ynoi2005] rpxleqxq
DreamWasTaken · · 题解
莫队二次离线模板题。
直接套 P4887 代码,只需要改变结构和询问:
P4887 中,我们希望
于是我们维护了数组
而这道题中
继续拆最大位就可以把
这样的时间复杂度为
代码:
void add(int val) {
for (int i = 17; i >= 9; i--)
if (x & (1 << i)) {
int l = (val >> i) << i;
int r = l + (1 << i);
l >>= 9, r >>= 9;
for (int j = l; j < r; j++)
layer2[j]++;
val ^= (1 << i);
}
for (int i = 8; i >= 0; i--)
if (x & (1 << i)) {
int l = (val >> i) << i;
int r = l + (1 << i);
for (int j = l; j < r; j++)
layer1[j]++;
val ^= (1 << i);
}
}