#AG1102006. 删除子串后的最大异或和

删除子串后的最大异或和

题目描述

给定一个长度为 n(1n105)n(1 \le n \le 10^5) 的数列 a1,a2,,an(0ai1012)a_1, a_2, \ldots, a_n(0 \le a_i \le 10^{12})

你可以删除数列中一段连续的数(这一段连续的数的个数可以从 00nn,为 00 则说明一个数都没有删除,为 nn 就说明整个数列都删除了)。

你希望使得剩下来的所有数字的异或和最大。求这个最大异或和。

输入格式

第一行,一个整数 n(1n105)n(1 \le n \le 10^5)

第二行,nn 个整数 a1,a2,,an(0ai1012)a_1, a_2, \ldots, a_n(0 \le a_i \le 10^{12})

输出格式

输出一个整数,表示删除一段连续子序列,剩下的前缀和后缀中所有元素的异或和的最大值。

样例

5
1 2 3 4 5
6

说明/提示

样例解释

最优方案是选择删除 [3,4][3, 4],剩下来的前缀 [1,2][1, 2] 和后缀 [5][5] 对应的异或和为 125=61 \oplus 2 \oplus 5 = 6

数据规模与约定

  • 对于 30%30\% 的数据,n10,ai1000n \le 10, a_i \le 1000
  • 对于 60%60\% 的数据,n1000,ai106n \le 1000, a_i \le 10^6
  • 对于 100%100\% 的数据,1n105,0ai10121 \le n \le 10^5, 0 \le a_i \le 10^{12}