区间或与与再异或之和最大值
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}现在加藤翔子又得到长度为 n 的整数序列 a_1, a_2, \dots, a_n,他需要将序列划分成若干个不相交的连续段(子区间),使得所有子区间的「价值」之和最大。
\hspace{15pt}对于一个子区间 [l,r],定义其「价值」为 \mathrm{val}(l,r)={O(l,r)}\operatorname{xor}{A(l,r)},其中:

O(l,r)=a_l \operatorname{or} a_{l+1}\operatorname{or}\cdots\operatorname{or} a_r.
A(l,r)=a_l \operatorname{and} a_{l+1}\operatorname{and}\cdots\operatorname{and} a_r.

\hspace{15pt}显然,若选取分界点 (0 = x_0) < x_1 < x_2 < \cdots < (x_m = n),则 \sum\limits_{j=1}^m \mathrm{val}\bigl(x_{j-1}+1,\;x_j\bigr) 即为所求的最大「价值」。

【名词解释】
\hspace{15pt}\operatorname{or}:指位运算中的按位或(Bitwise OR),对两个整数的二进制表示按位进行或运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节
\hspace{15pt}\operatorname{and}:指位运算中的按位与(Bitwise AND),对两个整数的二进制表示按位进行与运算。
\hspace{15pt}\operatorname{xor}:指位运算中的按位异或(Bitwise XOR),对两个整数的二进制表示按位进行异或运算。

输入描述:

\hspace{15pt}第一行输入一个整数 n \left ( 1 \le n \le 2\times10^5 \right ),表示序列长度。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n \left ( 0 \le a_i \le 10^9 \right ),表示序列的元素。

输出描述:

\hspace{15pt}输出一个整数,表示能取得的最大「价值」之和。
示例1

输入

复制
5
1 2 3 4 5

输出

复制
10

说明

\hspace{15pt}在这个样例中,一种最优划分为 [1..2][3..4][5..5]
\hspace{23pt}\bullet\,对于 [1..2]
\hspace{38pt}\circ\,O(1,2)=1\operatorname{or}2=3
\hspace{38pt}\circ\,A(1,2)=1\operatorname{and}2=0
\hspace{38pt}\circ\,\mathrm{val}(1,2)=3\operatorname{xor}0=3
\hspace{23pt}\bullet\,对于 [3..4]
\hspace{38pt}\circ\,O(3,4)=3\operatorname{or}4=7
\hspace{38pt}\circ\,A(3,4)=3\operatorname{and}4=0
\hspace{38pt}\circ\,\mathrm{val}(3,4)=7\operatorname{xor}0=7
\hspace{23pt}\bullet\,对于 [5..5]
\hspace{38pt}\circ\,O(5,5)=5
\hspace{38pt}\circ\,A(5,5)=5
\hspace{38pt}\circ\,\mathrm{val}(5,5)=5\operatorname{xor}5=0
\hspace{15pt}总和为 3+7+0 = 10
示例2

输入

复制
6
2 7 3 9 5 1

输出

复制
19

说明

\hspace{15pt}在这个样例中,一种最优划分为 [1..2][3..4][5..6]
\hspace{23pt}\bullet\,对于 [1..2]O=7A=2\mathrm{val}=5
\hspace{23pt}\bullet\,对于 [3..4]O=11A=1\mathrm{val}=10
\hspace{23pt}\bullet\,对于 [5..6]O=5A=1\mathrm{val}=4
\hspace{15pt}总和为 5+10+4 = 19
示例3

输入

复制
10
8 1 4 7 2 6 3 0 5 9

输出

复制
37

说明

\hspace{15pt}在这个样例中,一种最优划分为 [1..3][4..5][6..8][9..10]
\hspace{23pt}\bullet\,对于 [1..3]O=13A=0\mathrm{val}=13
\hspace{23pt}\bullet\,对于 [4..5]O=7A=2\mathrm{val}=5
\hspace{23pt}\bullet\,对于 [6..8]O=7A=0\mathrm{val}=7
\hspace{23pt}\bullet\,对于 [9..10]O=13A=1\mathrm{val}=12
\hspace{15pt}总和为 13+5+7+12 = 37