func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<long long> st;   long long n, q;   vector<int> swp(20, false);   vector<long long> arr;   void build(long long ind, long long l, long long r) {     if (l == r) {       st[ind] = arr[l];       return;     }     long long mid = (l + r) >> 1;     build(2 * ind, l, mid);     build(2 * ind + 1, mid + 1, r);     st[ind] = st[2 * ind] + st[2 * ind + 1];   }   void update(long long ind, long long l, long long r, long long req,               long long level) {     if (req < l || req > r) return;     if (l == r) {       st[ind] = arr[req];       return;     }     long long mid = (l + r) >> 1;     if (swp[level - 1]) {       update(2 * ind + 1, l, mid, req, level - 1);       update(2 * ind, mid + 1, r, req, level - 1);     } else {       update(2 * ind, l, mid, req, level - 1);       update(2 * ind + 1, mid + 1, r, req, level - 1);     }     st[ind] = st[2 * ind + 1] + st[2 * ind];   }   long long query(long long ind, long long l, long long r, long long ql,                   long long qr, long long level) {     if (l > qr || r < ql) return 0;     if (ql <= l && r <= qr) return st[ind];     long long mid = (l + r) / 2;     if (swp[level - 1])       return query(2 * ind + 1, l, mid, ql, qr, level - 1) +              query(2 * ind, mid + 1, r, ql, qr, level - 1);     else       return query(2 * ind, l, mid, ql, qr, level - 1) +              query(2 * ind + 1, mid + 1, r, ql, qr, level - 1);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     cin >> n >> q;     long long len = 1 << n;     arr.resize(len);     st.assign(4 * len, 0);     for (long long i = 0; i < len; i++) cin >> arr[i];     build(1, 0, len - 1);     while (q--) {       long long type;       cin >> type;       if (type == 1) {         long long ind, val;         cin >> ind >> val;         ind--;         arr[ind] = val;         update(1, 0, len - 1, ind, n);       } else if (type == 2) {         long long k;         cin >> k;         for (long long i = 0; i < k; i++) swp[i] ^= true;       } else if (type == 3) {         long long k;         cin >> k;         swp[k] ^= true;       } else {         long long l, r;         cin >> l >> r;         l--;         r--;         cout << query(1, 0, len - 1, l, r, n) <<   n ;       }     }     return 0;   }   