Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法
Posted Flowersea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法相关的知识,希望对你有一定的参考价值。
链接:
http://codeforces.com/contest/617/problem/E
代码:
31 struct node { 32 int l, r, id; 33 }q[MAXN]; 34 35 int n, m, k; 36 int a[MAXN]; 37 int pos[MAXN]; 38 ll ans[MAXN]; 39 ll sum[2000007]; 40 41 bool cmp(node a, node b) { 42 if (pos[a.l] == pos[b.l]) return a.r < b.r; 43 return pos[a.l] < pos[b.l]; 44 } 45 46 int L = 1, R = 0; 47 ll Ans = 0; 48 49 void add(int x) { 50 Ans += sum[a[x] ^ k]; 51 sum[a[x]]++; 52 } 53 54 void del(int x) { 55 sum[a[x]]--; 56 Ans -= sum[a[x] ^ k]; 57 } 58 59 int main() { 60 ios::sync_with_stdio(false), cin.tie(0); 61 cin >> n >> m >> k; 62 int sz = sqrt(n); 63 rep(i, 1, n + 1) { 64 cin >> a[i]; 65 a[i] ^= a[i - 1]; 66 pos[i] = i / sz; 67 } 68 rep(i, 0, m) { 69 cin >> q[i].l >> q[i].r; 70 q[i].id = i; 71 } 72 sort(q, q + m, cmp); 73 sum[0] = 1; 74 rep(i, 0, m) { 75 while (L < q[i].l) del(L - 1), L++; 76 while (L > q[i].l) L--, add(L - 1); 77 while (R < q[i].r) R++, add(R); 78 while (R > q[i].r) del(R), R--; 79 ans[q[i].id] = Ans; 80 } 81 rep(i, 0, m) cout << ans[i] << endl; 82 return 0; 83 }
以上是关于Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法的主要内容,如果未能解决你的问题,请参考以下文章
莫队 Codeforces Round #340 (Div. 2) E
Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法
Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法
Codeforces Round #340 (Div. 2) E XOR and Favorite Number 莫队板子
Codeforces Round #340 (Div. 2) E. XOR and Favorite Number 莫队算法 + 异或和前缀和的巧妙