CF1322B Present & P3760 [TJOI2017] 异或和
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 限制转化为范围限制。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步