atcoder#ARC135C. [ARC135C] XOR to All

[ARC135C] XOR to All

题目描述

非負整数列 A = (A1, , AN) A\ =\ (A_1,\ \ldots,\ A_N) が与えられます。 あなたは次の操作を、何度でも行うことができます(一度も行わなくてもよいです)。

  • 非負整数 x {A1,,AN} x\in\ \{A_1,\ldots,A_N\} をひとつ選ぶ。
  • すべての i i に対して、Ai A_i Ai x A_i\oplus\ x に置き換える( \oplus はビット単位 XOR \mathrm{XOR} 演算を表します)。

操作後の i=1N Ai \sum_{i=1}^N\ A_i としてありうる最大値を求めてください。

ビット単位 XOR \mathrm{XOR} 演算とは 非負整数 A, B A,\ B のビット単位 XOR \mathrm{XOR} A  B A\ \oplus\ B は、以下のように定義されます。

  • A  B A\ \oplus\ B を二進表記した際の 2k 2^k (k  0 k\ \geq\ 0 ) の位の数は、A, B A,\ B を二進表記した際の 2k 2^k の位の数のうち一方のみが 1 1 であれば 1 1 、そうでなければ 0 0 である。

例えば、3  5 = 6 3\ \oplus\ 5\ =\ 6 となります (二進表記すると: 011  101 = 110 011\ \oplus\ 101\ =\ 110 )。

输入格式

入力は以下の形式で標準入力から与えられます。

N N A1 A_1 \ldots AN A_N

输出格式

操作後の i=1N Ai \sum_{i=1}^N\ A_i としてありうる最大値を出力してください。

题目大意

题目描述

给定 nn 个非负整数 a1,a2,,ana_1,a_2,\dots,a_n,你可以执行以下操作任意(可以为零)次:

  • 选择一个数 x{a1,a2,,an}x\in \{a_1,a_2,\dots,a_n\}

  • 对于所有 aina\leq i\leq n,将 aia_i 修改为 aixa_i\oplus x,其中 \oplus 表示按位异或操作。

请你最大化操作后 i=1nai\sum_{i=1}^na_i 的值。

输入格式

第一行一个整数 nn

第二行 nn 个整数 a1,a2,,ana_1,a_2,\dots,a_n

输出格式

一行一个整数,表示操作后 i=1nai\sum_{i=1}^na_i 的最大值。

样例 #1

样例输入 #1

5
1 2 3 4 5

样例输出 #1

19

样例 #2

样例输入 #2

5
10 10 10 10 10

样例输出 #2

50

样例 #3

样例输入 #3

5
3 1 4 1 5

样例输出 #3

18

提示

数据范围

  • 1n3×1051\leq n \leq 3\times 10^5
  • 0ai<2300\leq a_i<2^{30}
5
1 2 3 4 5
19
5
10 10 10 10 10
50
5
3 1 4 1 5
18

提示

制約

  • 1 N  3× 105 1\leq\ N\ \leq\ 3\times\ 10^{5}
  • 0 Ai < 230 0\leq\ A_i\ <\ 2^{30}

Sample Explanation 1

例えば次のように操作を行うことで、i=1N Ai \sum_{i=1}^N\ A_i 19 19 にすることが可能です。 - はじめ、数列 A A は次の状態です:(1,2,3,4,5) (1,2,3,4,5) 。 - x = 1 x\ =\ 1 として操作を行うと、数列 A A は次の状態に変化します:(0,3,2,5,4) (0,3,2,5,4) 。 - x = 5 x\ =\ 5 として操作を行うと、数列 A A は次の状態に変化します:(5,6,7,0,1) (5,6,7,0,1) 。このとき $ \sum_{i=1}^N\ A_i\ =\ 5\ +\ 6\ +\ 7\ +\ 0\ +\ 1\ =\ 19 $ です。

Sample Explanation 2

操作を一度も行わないことで、i=1N Ai \sum_{i=1}^N\ A_i 50 50 にすることが可能です。