CF1322B
考虑每一位的贡献,记当前位为 \(k\)
显然高位不会影响低位,那么将所有数 \(\bmod 2^{k+1}\)
那么第 \(k\) 位为 \(1\) 当且仅当 \(2^k \le a'_i+a'_j < 2^{k+1}\) 或 \(2^{k+1}+2^k \le a'_i+a'_j < 2^{k+2}\)
排序+双指针可以做到 \(\mathcal O(n \log n \log A)\)
P3760 [TJOI2017] 异或和
同样经过一系列转化为求 \(a_i-a_j\) 的第 \(k\) 位为 \(1\) 的对数。
高位的值无关紧要,只会存在借位的 \(1\),同样可以直接将所有数 \(\bmod 2^{k+1}\)
那么得到: \(2^k \le a_j'-a_i' < 2^{k+1}\) 或 \(2^k \le (a_j'+2^{k+1})-a_i' < 2^{k+1}\)
注意此时对 \(a_i,a_j\) 的大小关系有要求,只能依次加入,采用树状树组维护区间和可做到 \(\mathcal O(n \log^2 A )\)
总结
首先是套路的将异或和拆分位计算
然后将某一位的 0/1 限制转化为范围限制。
标签:le,log,CF1322B,P3760,异或,TJOI2017,位为 From: https://www.cnblogs.com/chihik/p/CF1322B.html