代码
#include <bits/stdc++.h>
using namespace std;
int n, m, x, loc[1919810];
int mx[400005];
int g[100005];
void build(int l, int r, int pos)
{
if (l == r)
{
loc[g[l]] = l, mx[pos] = loc[g[l] ^ x];
return;
}
int mid = (l + r) >> 1;
build(l, mid, 2 * pos), build(mid + 1, r, 2 * pos + 1);
mx[pos] = max(mx[2 * pos], mx[2 * pos + 1]);
}
int query(int l, int r, int pos, int L, int R)
{
if (L <= l && r <= R) return mx[pos];
int mid = (l + r) >> 1, ans = 0;
if (L <= mid) ans = max(ans, query(l, mid, 2 * pos, L, R));
if (mid < R) ans = max(ans, query(mid + 1, r, 2 * pos + 1, L, R));
return ans;
}
int main()
{
cin >> n >> m >> x;
for(int i = 1; i <= n; i++) {
cin >> g[i];
}
build(1, n, 1);
while (m--)
{
int l, r;
scanf("%d%d", &l, &r);
if (query(1, n, 1, l, r) >= l) puts("yes"); else puts("no");
}
return 0;
}