func_code_string: #include <bits/stdc++.h>   using namespace std;   const int mod = 1e9 + 7;   long long tree[400020][21], lazy[400020][21], arr[100005];   void build(int l, int r, int node, int i) {     if (l == r) {       tree[node][i] = 0;       if (arr[l] & (1 << i)) {         tree[node][i] = 1;       }       return;     }     int mid = (l + r) >> 1;     build(l, mid, 2 * node, i);     build(mid + 1, r, 2 * node + 1, i);     tree[node][i] = tree[2 * node][i] + tree[2 * node + 1][i];     return;   }   void update(int l, int r, int ql, int qr, int node, int i) {     if (lazy[node][i]) {       tree[node][i] = (r - l + 1) - tree[node][i];       if (l != r) {         lazy[2 * node][i] ^= 1;         lazy[2 * node + 1][i] ^= 1;       }       lazy[node][i] = 0;     }     if (l > qr || r < ql) return;     if (ql <= l && r <= qr) {       tree[node][i] = (r - l + 1) - tree[node][i];       if (l != r) {         lazy[2 * node][i] ^= 1;         lazy[2 * node + 1][i] ^= 1;       }       lazy[node][i] = 0;       return;     }     int mid = (l + r) >> 1;     update(l, mid, ql, qr, 2 * node, i);     update(mid + 1, r, ql, qr, 2 * node + 1, i);     tree[node][i] = tree[2 * node][i] + tree[2 * node + 1][i];     return;   }   long long query(int l, int r, int ql, int qr, int node, int i) {     if (lazy[node][i]) {       tree[node][i] = (r - l + 1) - tree[node][i];       if (l != r) {         lazy[2 * node][i] ^= 1;         lazy[2 * node + 1][i] ^= 1;       }       lazy[node][i] = 0;     }     if (l > qr || r < ql) return 0;     if (ql <= l && r <= qr) return tree[node][i];     int mid = (l + r) >> 1;     return query(l, mid, ql, qr, 2 * node, i) +            query(mid + 1, r, ql, qr, 2 * node + 1, i);   }   int main(int argc, char const *argv[]) {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     int n;     cin >> n;     for (int i = 0; i < n; ++i) {       cin >> arr[i];     }     for (int i = 0; i < 20; ++i) {       build(0, n - 1, 1, i);     }     int q;     cin >> q;     while (q--) {       int id, l, r;       long long x;       cin >> id;       if (id == 1) {         cin >> l >> r;         l--, r--;         long long ans = 0;         for (int i = 0; i < 20; i++)           ans += (query(0, n - 1, l, r, 1, i)) * (1LL << i);         cout << ans <<   n ;       } else {         cin >> l >> r >> x;         l--, r--;         for (int i = 0; i < 20; ++i) {           if (x & (1LL << i)) {             update(0, n - 1, l, r, 1, i);           }         }       }     }     return 0;   }   