func_code_string: #include <bits/stdc++.h>   using namespace std;   long long int n;   map<pair<long long int, long long int>, long long int> val;   long long int get_lca(long long int x, long long int y) {     vector<long long int> a, b;     a.clear();     b.clear();     while (x > 0) {       a.push_back(x);       x >>= 1;     }     while (y > 0) {       b.push_back(y);       y >>= 1;     }     reverse(a.begin(), a.end());     reverse(b.begin(), b.end());     long long int j = 0;     for (j = 0; j < a.size() && j < b.size(); j++) {       if (a[j] != b[j]) break;     }     return a[j - 1];   }   void upd(long long int x, long long int l, long long int w) {     long long int y = x % 2;     x >>= 1;     while (x > 0) {       val[{x, y}] += w;       y = x % 2;       x >>= 1;     }     y = l % 2;     l >>= 1;     while (l > 0) {       val[{l, y}] -= w;       y = l % 2;       l >>= 1;     }   }   long long int get(long long int x, long long int l) {     long long int an = 0;     long long int y = x % 2;     x >>= 1;     while (x > 0 && x >= l) {       an += val[{x, y}];       y = x % 2;       x >>= 1;     }     return an;   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n;     for (int i = 1; i <= n; i++) {       long long int t, u, v, w;       cin >> t >> u >> v;       if (t == 1) {         cin >> w;         long long int l = get_lca(u, v);         upd(u, l, w);         upd(v, l, w);       } else {         long long int l = get_lca(u, v);         long long int an = get(u, l) + get(v, l);         cout << an <<   n ;       }     }     return 0;   }   