[HDU4867]Xor (线段树分治+类数位dp)
[HDU4867]Xor (线段树分治+类数位dp) 提供一种 \((m+n) log a log m\) 带有常数约 \(\frac{1}{log n}\) 的算法 处理询问,将后来加入的数算进序列中,则每个数 \(a_i\) 都有一段出现的区间 \([L,R]\) 离线询问后,我们考虑用线段树分治将这些数加入到询问区间上 由于最多只有5000个询问,事实上这些数在线段树上覆盖的区间最多只有 \(10000logm\) 个,并且有着极其不满的常数(因为每个位置上的数都由多段区间组合而来,总长为 \(m\) ,或者你可以觉得我在放屁) 如果直接处理每个数的贡献,那么这个 \(dp\) 是 \(a*a\) 转移的 然而事实上我们存在一种 \(a*loga\) 的转移方法 对于一个数 \(x\) ,如果我们取 \(y \leq x\) 时,最高位为 \(0\) ,则后面的位均可以随便取 换句话说,对于每一个前 \(k\) 位相同的集合,它们都能够转移到它们之间的任何一个,可以直接累和 同样的,考虑在第 \(k\) 位出现一个 \(x\) 在该位为 \(1\) , \(y\) 为 \(0\) ,都具有类似的转移性质 最后写出来跟数位 \(dp\) 一个样子。。。 (真不行你可以试试某变换,但是我不会!) 这样的情况个数即这个数 \(1\) 位的个数,这样的个数期望情况下可以看做常数。。。