#include<bits/stdc++.h>
using namespace std;
const int maxn = 1<<20;
struct node
{
int l, r, id;
}Q[maxn];
int pos[maxn], a[maxn];
long long ans[maxn], flag[maxn];
bool cmp(node a, node b)
{
if(pos[a.l] == pos[b.l])
return a.r < b.r;
return pos[a.l] < pos[b.l];
}
int n, m, k;
int L = 1, R = 0;
long long Ans = 0;
void add(int x)
{
Ans += flag[a[x]^k];
flag[a[x]]++;
}
void del(int x)
{
flag[a[x]]--;
Ans -= flag[a[x]^k];
}
int main()
{
scanf("%d%d%d", &n, &m, &k);
int sz = sqrt(n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
a[i] = a[i] ^ a[i-1];
pos[i] = i / sz;
}
for (int i = 1; i <= m; i++)
{
scanf("%d%d", &Q[i].l, &Q[i].r);
Q[i].id = i;
}
sort(Q+1, Q+1+m, cmp);
flag[0] = 1;
for (int i = 1; i <= m; i++)
{
while(L < Q[i].l)
{
del(L - 1);
L++;
}
while(L > Q[i].l)
{
L--;
add(L - 1);
}
while(R < Q[i].r)
{
R++;
add(R);
}
while(R > Q[i].r)
{
del(R);
R--;
}
ans[Q[i].id] = Ans;
}
for (int i = 1; i <= m; i++)
{
cout << ans[i] << endl;
}
}
Codeforces - 617E - XOR and Favorite Number【莫队】
猜你喜欢
转载自blog.csdn.net/qq_37602930/article/details/81408252
今日推荐
周排行