#P51072. 「十二省联考 2019」异或粽子

「十二省联考 2019」异或粽子

题目描述

小粽是一个喜欢吃粽子的好孩子。今天她在家里自己做起了粽子。

小粽面前有 nn 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 11nn。第 ii 种馅儿具有一个非负整数的属性值 aia_i。每种馅儿的数量都足够多,即小粽不会因为缺少原料而做不出想要的粽子。小粽准备用这些馅儿来做出 kk 个粽子。

小粽的做法是:选两个整数数 l,rl,r,满足 1lrn1\le l\le r\le n,将编号在 [l,r][l,r] 范围内的所有馅儿混合做成一个粽子,所得的粽子的美味度为这些粽子的属性值的异或和。(异或就是我们常说的 xor\mathrm{xor} 运算,即 C/C++ 中的 ^ 运算符或 Pascal 中的 xor 运算符)

小粽想品尝不同口味的粽子,因此它不希望用同样的馅儿的集合做出一个以上的粽子。

小粽希望她做出的所有粽子的美味度之和最大。请你帮她求出这个值吧!

输入格式

从标准输入读入数据。

第一行两个正整数 n,kn,k,表示馅儿的数量,以及小粽打算做出的粽子的数量。

接下来一行为 nn 个非负整数,第 ii 个数为 aia_i,表示第 ii 个粽子的属性值。

输出格式

输出到标准输出。

输出一行一个整数,表示小粽可以做出的粽子的美味度之和的最大值。

样例

3 2
1 2 3
6

小粽可以选取 [3,3],[1,2][3,3],[1,2] 两个区间的馅儿做成粽子,两个粽子的美味度都为 33,和为 66。可以证明不存在比这更优的方案。

见附加文件 2.in/ans

数据范围与提示

测试点 nn kk
181\sim 8 103\le 10^{3} 103\le 10^{3}
9129\sim 12 5×105\le 5 \times 10^{5}
131613\sim 16 103\le 10^{3} 2×105\le 2 \times 10^{5}
172017\sim 20 5×105\le 5 \times 10^{5}

对于所有的输入数据都满足:1n5×105,1kmin{n(n1)2,2×105},0ai4,294,967,2951\le n \le 5 \times 10^{5},1\le k\le \min\left\{\frac{n(n-1)}{2},2 \times 10^{5}\right\},0\le a_i \le 4,294,967,295