#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAX = 1e6 + 7;
ll ans[MAX * 20], res;
int a[MAX], cnt[MAX * 10], n, m, k, sz;
struct node
{
int l, r, id;
} q[MAX];
bool cmp(node a, node b)
{
if(a.l / sz == b.l / sz)
return a.r < b.r;
return a.l / sz < b.l / sz;
}
void add(int x)
{
res += cnt[a[x] ^ k];
cnt[a[x]]++;
}
void del(int x)
{
cnt[a[x]]--;
res -= cnt[a[x] ^ k];
}
int main()
{
scanf("%d%d%d", &n, &m, &k);
cnt[0] = 1;
sz = sqrt(n);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
a[i] ^= a[i - 1];
}
for(int i = 1; i <= m; i++)
{
scanf("%d%d", &q[i].l, &q[i].r);
q[i].id = i;
}
sort(q + 1, q + m + 1, cmp);
int l = 1, r = 0;
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] = res;
}
for(int i = 1; i <= m; i++)
printf("%lld\n", ans[i]);
return 0;
}
Codeforces Round #340 (Div. 2) E 【莫队】
最新推荐文章于 2019-08-06 22:38:01 发布