题目大意:长度为n的整数序列,可以选出多少个互补重叠的异或和为k的区间?
题目描述
例如,对于序列 $[2, 1, 0, 3]$,若 $k = 2$,则小 R 可以选择区间 $[1, 1]$ 和区间 $[2, 4]$,权值分别为 $2$ 和 $1 \oplus 0 \oplus 3 = 2$;若 $k = 3$,则小 R 可以选择区间 $[1, 2]$ 和区间 $[4, 4]$,权值分别为 $1 \oplus 2 = 3$ 和 $3$。
你需要帮助小 R 求出他能选出的区间数量的最大值。
输入格式
输出格式
说明/提示
### 【样例 2 解释】
小 R 可以选择区间 $[1, 2]$ 和区间 $[4, 4]$,异或和分别为 $1 \oplus 2 = 3$ 和 $3$。可以证明,小 R 能选出的区间数量的最大值为 $2$。
### 【样例 3 解释】
小 R 可以选择区间 $[3, 3]$,异或和为 $0$。可以证明,小 R 能选出的区间数量的最大值为 $1$。注意:小 R 不能同时选择区间 $[3, 3]$ 和区间 $[1, 4]$,因为这两个区间同时包含下标 $3$。
### 【样例 4】
见选手目录下的 $xor/xor4.in$ 与 $xor/xor4.ans$。
该样例满足测试点 $4, 5$ 的约束条件。
### 【样例 5】
见选手目录下的 $xor/xor5.in$ 与 $xor/xor5.ans$。
该样例满足测试点 $9, 10$ 的约束条件。
【样例 6】
见选手目录下的 $xor/xor6.in$ 与 $xor/xor6.ans$。
该样例满足测试点 $14, 15$ 的约束条件。
### 【数据范围】
对于所有测试数据,保证:
– $1 \leq n \leq 5 \times 10^5$, $0 \leq k < 2^{20}$;
– 对于所有 $1 \leq i \leq n$,均有 $0 \leq a_i < 2^{20}$。
::cute-table{tuack}
| 测试点编号 | $n \leq$ | $k$ | 特殊性质 |
| :–: | :–: | :–: | :–: |
| $1$ | $2$ | $=0$ | A |
| $2$ | $10$ | $\leq 1$ | B |
| $3$ | $10^2$ | $=0$ | A |
| $4, 5$ | ^ | $\leq 1$ | B |
| $6 \sim 8$ | ^ | $\leq 255$ | C |
| $9, 10$ | $10^3$ | ^ | ^ |
| $11, 12$ | ^ | $< 2^{20}$ | 无 |
| $13$ | $2 \times 10^5$ | $\leq 1$ | B |
| $14, 15$ | ^ | $\leq 255$ | C |
| $16$ | ^ | $< 2^{20}$ | 无 |
| $17$ | $5 \times 10^5$ | $\leq 255$ | C |
| $18 \sim 20$ | ^ | $< 2^{20}$ | 无 |
特殊性质 A: 对于所有 $1 \leq i \leq n$,均有 $a_i = 1$。
特殊性质 B: 对于所有 $1 \leq i \leq n$,均有 $0 \leq a_i \leq 1$。
特殊性质 C: 对于所有 $1 \leq i \leq n$,均有 $0 \leq a_i \leq 255$。
解题思路
f[i]表示前i个数的最优值,第i个数要么选要么不选。不选则f[i] = f[i-1],选的话则贪心找到异或和为m的最靠右的端点。
加速查找:预处理前缀异或和s[i],另外应给端点的异或和为s[i]^m,哈希一下即可。
程序实现

原来是这样用的 😉