Submission #445622

#TimeUsernameProblemLanguageResultExecution timeMemory
445622aris12345678XORanges (eJOI19_xoranges)C++14
100 / 100
143 ms8356 KiB
#include <bits/stdc++.h>
using namespace std;

const int mxN = 2*1e5+5;
int a[mxN];

template<typename T> struct Fenwick_Tree {
    vector<T> bit;
    void init(int n) {
        bit.assign(mxN, 0);
    }
    void update(int pos, T val, int n) {
        while(pos < mxN) {
            bit[pos] ^= val;
            pos += (pos&(-pos));
        }
    }
    T query(int pos) {
        int ans = 0;
        while(pos > 0) {
            ans ^= bit[pos];
            pos -= (pos&(-pos));
        }
        return ans;
    }
};

Fenwick_Tree<int> bit_even, bit_odd; 

int main() {
    int n, q;
    scanf("%d %d", &n, &q);
    bit_even.init(n);
    bit_odd.init(n);
    for(int i = 1; i <= n; i++) {
        scanf("%d", &a[i]);
        if(i%2 == 0)
            bit_even.update(i, a[i], n);
        else
            bit_odd.update(i, a[i], n);
    }
    while(q--) {
        int type, l, r;
        scanf("%d %d %d", &type, &l, &r);
        if(type == 1) {
            if(l%2 == 0) {
                bit_even.update(l, a[l], n);
                bit_even.update(l, r, n);
            } else {
                bit_odd.update(l, a[l], n);
                bit_odd.update(l, r, n);
            }
            a[l] = r;
        } else {
            if(l%2 != r%2)
                printf("0\n");
            else {
                int ans;
                if(l == 1) {
                    if(r%2 == 0)
                        ans = bit_even.query(r);
                    else
                        ans = bit_odd.query(r);
                } else {
                    if(r%2 == 0)
                        ans = bit_even.query(r)^bit_even.query(l-1);
                    else
                        ans = bit_odd.query(r)^bit_odd.query(l-1);
                }
                printf("%d\n", ans);
            }
        }
    }
    return 0;
}

Compilation message (stderr)

xoranges.cpp: In function 'int main()':
xoranges.cpp:32:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |     scanf("%d %d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~~
xoranges.cpp:36:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   36 |         scanf("%d", &a[i]);
      |         ~~~~~^~~~~~~~~~~~~
xoranges.cpp:44:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |         scanf("%d %d %d", &type, &l, &r);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...