Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include<algorithm>
- #include <cmath>
- #include <iomanip>
- #include <map>
- #include <set>
- #include <string>
- using namespace std;
- bool cmp(vector<int> a, vector<int> b) {
- return (((a[0] / 350) < (b[0] / 350)) || (((a[0] / 350) == (b[0] / 350)) && (a[1] < b[1])));
- }
- int main() {
- long long n, m, k, a, l = 0,r=0,ans=0;
- cin >> n >> m >> k;
- vector<int> cmt((1<<20),0);
- vector<int > p(n + 1, 0);
- vector<vector<int> > q(m, vector<int>(3));
- vector<int> otv(m);
- for (int i = 0; i < n; i++) {
- cin >> a;
- p[i + 1] = (p[i] ^ a);
- }
- cmt[0] = 1;
- for (int i = 0; i < m; i++) {
- cin >> q[i][0] >> q[i][1];
- q[i][0]--;
- q[i][1]++;
- q[i][2] = i;
- }
- sort(q.begin(), q.end(), cmp);
- for (int j = 0; j < m; j++) {
- while (r < q[j][1]) {
- ans += cmt[(p[r]^k)];
- cmt[p[r]]++;
- ++r;
- }
- while (l > q[j][0]) {
- --l;
- ans += cmt[p[l] ^ k];
- cmt[p[l]]++;
- }
- while (r > q[j][1]) {
- --r;
- --cmt[p[r]];
- ans -= cmt[(p[r] ^ k)];
- }
- while (l < q[j][0]) {
- cmt[p[l]]--;
- ans -= cmt[p[l] ^ k];
- ++l;
- }
- otv[q[j][2]] = ans;
- }
- for (auto i : otv) {
- cout << i << endl;
- }
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement