#YHCSPJMN100003. 异或子段和

异或子段和

异或子段和

题目背景

在育华学校的算法实践课程中,小核桃学习了位运算中的异或操作,并遇到了一个有趣的问题。需要通过合理选择数组的异或区间和求和区间,来获得最大的求和值,以此锻炼同学们对异或运算性质的理解,以及动态规划在处理子段和问题中的应用能力。

题目描述

小核桃在学习位运算的异或操作后,面临这样的问题:
给定长度为 n n 的数组和数字 k k ,可进行以下操作:

  1. 选择一段区间(可空),将区间内所有数与 k k 异或。
  2. 再随机选择一段连续区间(可空),对区间内数求和。

目标是让第二次求和的值最大,求这个最大可能值。

输入格式

  1. 第一行:两个整数 n,k n, k 1n105 1 \leq n \leq 10^5 )。
  2. 第二行:n n 个整数 a1,a2,,an a_1, a_2, \dots, a_n 105ai105 -10^5 \leq a_i \leq 10^5 )。

输出格式

输出一行一个整数,表示最大可能的求和值。

样例

样例输入 1

4 3  
4 4 4 -10  

样例输出 1

21  

样例解释

选择前三个数异或 3 3 ,数组变为 [7,7,7,10] [7,7,7,-10] ,最大子段和为 7+7+7=21 7+7+7=21 (选择前三个数求和 )。

数据规模与测试点(共20个测试点,育华学校专项 )

测试点编号 n n 范围 k k 范围 特殊性质
1 105 \leq 10^5 =0 =0
2-3 200 \leq 200 1k105 1 \leq k \leq 10^5
4-5 2000 \leq 2000
6 105 10^5 =1 =1 ai<0 a_i < 0
7-10 105 \leq 10^5 1k105 1 \leq k \leq 10^5
11-14
15-18
19-20

对所有测试点,数组中数都满足 105ai105 -10^5 \leq a_i \leq 10^5