CFCF2146D2.Max Sum OR (Hard Version)

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

这是该问题的 Hard 版本。不同之处在于本版本中,0lr<2300 \leq l \leq r < 2^{30}。只有在你解决了所有版本的本题后,才可以进行 Hack。

给定两个整数 llrrlrl \leq r)。

n=rl+1n = r - l + 1。我们将创建两个长度为 nn 的数组 aabb。一开始,aabb 均为 [l,l+1,,r][l, l+1, \ldots, r]。你的任务是任意重新排列数组 aa,使下面的值最大化:

i=1n(aibi)\sum_{i=1}^n \left (a_i\,|\,b_i \right )

其中,| 表示按位或运算

你还需要给出一种重新排列数组 aa 的方案。

输入格式

每组测试包含多组数据。第一行包含整数 tt1t1041 \leq t \leq 10^4),表示测试组数。

接下来每组测试一行,包含两个整数 llrr0lr<2300 \leq l \leq r < 2^{30}),即数组 aa 的最小和最大元素。

n=rl+1n = r - l + 1。保证所有测试用例中,所有 nn 之和不超过 21052 \cdot 10^5

输出格式

对于每组测试数据,输出两行。

第一行输出一个整数,表示最大的 i=1n(aibi)\sum\limits_{i=1}^n (a_i\,|\,b_i)

第二行输出 nn 个两两不同的整数 a1,a2,,ana_1, a_2, \ldots, a_n,表示重新排列后的数组 aa

如果有多种方案,可以任选其一输出。

输入输出样例

  • 输入#1

    7
    0 3
    0 9
    0 15
    6 10
    1 4
    3 6
    1000000007 1000000009

    输出#1

    12
    3 2 1 0 
    90
    7 8 5 4 3 2 9 0 1 6
    240
    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 
    70
    10 8 7 6 9
    20
    2 1 4 3 
    28
    4 3 6 5 
    3000000039
    1000000008 1000000007 1000000009

说明/提示

在第一个测试用例中,重排后的数组 aa[3,2,1,0][3,2,1,0]。表达式值为 (30)+(21)+(12)+(03)=3+3+3+3=12(3\,|\,0)+(2\,|\,1)+(1\,|\,2)+(0\,|\,3)=3+3+3+3=12。可以证明这是表达式最大可能值。

在第二个测试用例中,重排后的数组 aa[7,8,5,4,3,2,9,0,1,6][7,8,5,4,3,2,9,0,1,6]。表达式值为 9090。可以证明这是最大可能值。

在第三个测试用例中,可以证明 240240 是表达式最大可能值。

在第四个测试用例中,重排后的数组 aa[10,8,7,6,9][10,8,7,6,9]。表达式值为 (106)+(87)+(78)+(69)+(910)=14+15+15+15+11=70(10\,|\,6)+(8\,|\,7)+(7\,|\,8)+(6\,|\,9)+(9\,|\,10)=14+15+15+15+11=70。可以证明这是最大可能值。

首页