U150104 不考位运算 2

题目背景

RT,不考位运算的第 2 道,是 [U150094 不考位运算 ](https://www.luogu.com.cn/problem/U150094) 的简单加强版。

题目描述

给定一长度为 $n$ 的数列 $a$,有 $m$ 次查询操作。每次查询给定四个正整数 $l_1,r_1,l_2,r_2$,求: $$\sum_{i=l_1}^{r_1}\sum_{j=l_2}^{r_2}(a_i\oplus a_j) \pmod{10^9 + 7}$$ 其中 $\oplus$ 代表按位异或运算。

输入格式

第 $1$ 行有两个整数 $n,m$,分别代表数列长度、询问次数。 第 $2$ 行有 $n$ 个整数,描述了给定的数列 $a$。 第 $3\sim m + 2$ 行每行有四个整数 $l_1,r_1,l_2,r_2$,描述了一次查询操作。

输出格式

输出共 $m$ 行,第 $i$ 行代表第 $i$ 次查询的结果。

说明/提示

|测试点编号|$n,m\le$|特殊性质| |-|-|-| |$1\sim 6$|$100$|无| |$7\sim 8$|$10^3$|保证每次询问的 $l_1 = 1, r_1 = n$| |$9\sim 12$|$5\times 10^5$|$a_i\le 8$| |$11\sim 20$|$5\times 10^5$|无| 对于所有测试点,$1\le n,m\le 5\times 10^5$,$0\le a_i\le 10^9$。 测试点 $9\sim 20$ 输入量约 20MB,请使用较快的读入方式。 ## Sol 异或运算仅关注两数每一位是否相同,考虑拆位,对每个数进行二进制分解,用前缀和分别维护每一位上 0/1 的个数。查询时取出两区间中各位 0/1 的个数,考察与每位不同的数的对数,统计贡献即可。 总复杂度 $O((n+m)\log w)$ 级别,其中 $w\approx 30$,为二进制位数。