记录
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int n, m, x;
int a[maxn];
int b[1050000];
int f[maxn][21], LOG[maxn];
void st() {
for (int i = 2; i <= n + 1; i++) {
LOG[i] = LOG[i >> 2] + 1;
}
for (int j = 1; j <= 20; j++) {
for (int i = 1; i + (1 << j) - 1 <= n; i++) {
f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]);
}
}
}
int query(int l, int r) {
int k = LOG[r - l + 1];
return max(f[l][k], f[r - (1 << k) + 1][k]);
}
int main() {
scanf("%d%d%d", &n, &m, &x);
for (int i = 1; i <= n; i++) {
int num;
scanf("%d", &num);
f[i][0] = b[num ^ x];
b[num] = i;
}
st();
while (m--) {
int l, r;
scanf("%d%d", &l, &r);
if (query(l, r) >= l) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}