求$(a_1+a_2)\bigoplus(a_1+a_3)..(a_1+a_n)\bigoplus(a_2+a_3)…(a_{n-1}+a_{n})$
按位分别计算。
对于一位只有$a[i]+a[j]\in [2^k,2^{k+1}-1],[2^k+2^{k+1},2^{k+2}-2]$的数量会在二进制上异或产生影响。我们只保留$a[i]二进制的前k$位。
- 寻找数量时,可以先排序,在用双指针维护一个区间,每次统计数量。
- 如果从高位到低位,假设之前已经排序好,那么$a_i>=2^k$和$a_i<2^k$,$[1,i),[i,n]$已经排序好了。只需要归并一下即可
- 如果朴素的统计,在第$k$位下$tmp=\sum_{i=1}^n\sum_{j=1}^n [a_i+a_j\in p]$正式的影响$k$位的数$=(tmp-\sum_{i=1}^n [a_i+a_i\in p])/2$,$p$为在所要求在的两个区间
代码
1 |
|