题目描述
给定一个长度为 n 的数列 a1,a2,…,an 以及一个整数 k。
你需要依次回答 m 次询问,每次询问给你两个整数 l 和 r,你需要回答出区间 [l,r] 存在多少子区间的异或和为 k。即:你需要判断存在多少对下标对 (i,j) 满足 l≤i≤j≤r 且 ai⊕ai+1⊕…⊕aj=k。(这里 ⊕ 表示异或符号)
输入格式
第一行,三个整数 n、m 和 k(1≤n,m≤105,0≤k≤106)。
第二行,n 个整数 a1,a2,…,an(0≤ai≤106)。
接下来 m 行,每行包含两个整数 l 和 r,表示一次询问(1≤l≤r≤n)。
输出格式
对于每次询问,输出一个整数,表示区间 [l,r] 范围内存在多少个子区间的异或和为 k。
样例
6 2 3
1 2 1 1 0 3
1 6
3 5
7
0
5 3 1
1 1 1 1 1
1 5
2 4
1 3
9
4
4
说明/提示
数据规模与约定
- 对于 30% 的数据,n,m≤10,k,ai≤100
- 对于 60% 的数据,n,m≤1000,k,ai≤10000
- 对于 100% 的数据,1≤n,m≤105,0≤k,ai≤106,1≤l≤r≤n