思路:f[i]表示i位置找到数异或的值最近位置,我们看右区间处f[r]是否小于L即可
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010, M = (1 << 20) + 10;
int last[M], f[N];
int n, m, x;
int main()
{
scanf("%d%d%d", &n, &m, &x);
for (int i = 1; i <= n; i ++){
int a;
scanf("%d", &a);
f[i] = max(f[i - 1], last[a ^ x]);
last[a] = i;
}
while (m -- ) {
int l, r;
scanf("%d%d", &l, &r);
if (f[r] >= l) puts("yes");
else puts("no");
}
return 0;
}