异或和(XOR Sum)
题目描述
小 R 有一个长度为 n 的非负整数序列 a1,a2,…,an。定义一个区间 [l,r] (1≤l≤r≤n) 的权值为 al,al+1,…,ar 的二进制按位异或和,即 al⊕al+1⊕⋯⊕ar,其中 ⊕ 表示二进制按位异或。
小 X 给了小 R 一个非负整数 k。小 X 希望小 R 选择序列中尽可能多的不相交的区间,使得每个区间的权值均为 k。两个区间 [l1,r1],[l2,r2] 相交当且仅当两个区间同时包含至少一个相同的下标,即存在 1≤i≤n 使得 l1≤i≤r1 且 l2≤i≤r2。
例如,对于序列 [2,1,0,3],若 k=2,则小 R 可以选择区间 [1,1] 和区间 [2,4],权值分别为 2 和 1⊕0⊕3=2;若 k=3,则小 R 可以选择区间 [1,2] 和区间 [4,4],权值分别为 1⊕2=3 和 3。
你需要帮助小 R 求出他能选出的区间数量的最大值。
输入格式
输入的第一行包含两个非负整数 n,k,分别表示小 R 的序列长度和小 X 给小 R 的非负整数。
输入的第二行包含 n 个非负整数 a1,a2,…,an,表示小 R 的序列。
输出格式
输出一行一个非负整数,表示小 R 能选出的区间数量的最大值。
样例输入 #1
4 2
2 1 0 3
样例输出 #1
2
样例输入 #2
4 3
2 1 0 3
样例输出 #2
2
样例输入 #3
4 0
2 1 0 3
样例输出 #3
1
数据范围
对于所有测试数据,保证:
- 1≤n≤5×105, 0≤k<220;
- 对于所有 1≤i≤n,均有 0≤ai<220。
| 测试点编号 |
n≤ |
k |
特殊性质 |
| 1 |
2 |
=0 |
A |
| 2 |
10 |
≤1 |
B |
| 3 |
102 |
=0 |
A |
| 4,5 |
^ |
≤1 |
B |
| 6∼8 |
≤255 |
C |
| 9,10 |
103 |
^ |
| 11,12 |
^ |
<220 |
无 |
| 13 |
2×105 |
≤1 |
B |
| 14,15 |
^ |
≤255 |
C |
| 16 |
<220 |
无 |
| 17 |
5×105 |
≤255 |
C |
| 18∼20 |
^ |
<220 |
无 |
特殊性质 A: 对于所有 1≤i≤n,均有 ai=1。
特殊性质 B: 对于所有 1≤i≤n,均有 0≤ai≤1。
特殊性质 C: 对于所有 1≤i≤n,均有 0≤ai≤255。
知识点与难度
本题涉及的知识点从属于 GESP 五级(贪心、前缀异或、哈希表),难度等级:⭐⭐⭐。
测试点分布
| Subtask |
分值 |
测试点编号 |
说明 |
| 0 |
10 |
1~3 |
样例 |
| 1 |
20 |
4~8 |
小规模 n≤100 / 特殊: 全1 / 特殊: 0/1 / 特殊: ≤255 |
| 2 |
15 |
9~11 |
Hack: k=0全0 / 无匹配 / n=1 |
| 3 |
30 |
12~20 |
中规模 n≤1000 / 大规模 n≈2e5~5e5 压力 |
| 4 |
25 |
21~25 |
随机 n=1~5e5 回归 |