In this HackerEarth Bit operations problem solution You are given an array of size n. Initially, all the elements are zero. You are provided with  queries and each query is one of the following types:
  1. L R X: For each element in the range [L, R] such as y, set y = y|X.
  2. L R X: For each element in the range [L,R] like y, set y = y&X.
  3. L R X: For each element in the range [L,R] like y, set y = y xor x.
  4. L R: Print the sum of the elements in range[L,R].
  5. L R: Print the XOR of the elements in range [L,R].

HackerEarth Bit operations problem solution


HackerEarth Bit operations problem solution.

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e6 + 17;
int n, q, a[maxn];
int main(){
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n >> q;
    while(q--){
        int t, l, r, x;
        cin >> t >> l >> r;
        l--;
        if(t < 4){
            cin >> x;
            while(l < r)
                if(t == 1)
                    a[l++] |= x;
                else if(t == 2)
                    a[l++] &= x;
                else
                    a[l++] ^= x;
        }
        else if(t == 4)
            cout << accumulate(a + l, a + r, 0ll) << '\n';
        else
            cout << accumulate(a + l, a + r, 0, [](int a, int b){  return a ^ b;  }) << '\n';
    }
}