func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Node {     int idx, sum;     int left, right;   } tree[3000000];   int cnt;   long long sumVal;   char ch[10];   void addNode(int cur, int def, int h, int val) {     if (tree[cur].idx == def) {       tree[cur].sum += val;       return;     }     tree[cur].sum += val;     if ((1 << (h)) & def) {       if (tree[cur].right == 0) {         tree[cur].right = ++cnt;         tree[cnt].idx = tree[cur].idx * 2 + 1;         tree[cnt].sum = 0;         tree[cnt].left = tree[cnt].right = 0;       }       addNode(tree[cur].right, def, h - 1, val);     } else {       if (tree[cur].left == 0) {         tree[cur].left = ++cnt;         tree[cnt].idx = tree[cur].idx * 2;         tree[cnt].sum = 0;         tree[cnt].left = tree[cnt].right = 0;       }       addNode(tree[cur].left, def, h - 1, val);     }   }   void decayNode(int cur, int h, int maxVal) {     if (h == 0) {       sumVal += max(maxVal, tree[cur].sum);       return;     }     int u = tree[cur].left, v = tree[cur].right;     if (tree[u].sum > tree[v].sum) {       long long t = max(maxVal, tree[cur].sum - tree[v].sum);       sumVal += (long long)(1 << (h - 1)) * t;       maxVal = max(maxVal, tree[cur].sum - tree[u].sum);       decayNode(u, h - 1, maxVal);     } else {       long long t = max(maxVal, tree[cur].sum - tree[u].sum);       sumVal += (long long)(1 << (h - 1)) * t;       maxVal = max(maxVal, tree[cur].sum - tree[v].sum);       decayNode(v, h - 1, maxVal);     }   }   int main(int argc, char** argv) {     int n, m, k, e;     scanf( %d%d , &n, &m);     cnt = 1;     tree[1].idx = 1;     tree[1].sum = 0;     tree[0].sum = 0;     tree[1].left = tree[1].right = 0;     for (int i = 1; i <= m; i++) {       scanf( %s , ch);       if (ch[0] ==  d ) {         sumVal = 0;         decayNode(1, n, 0);         double ans = (double)sumVal / (double)(1 << (n));         printf( %.8lf n , ans);       } else {         scanf( %d%d , &k, &e);         int h = 0, p = k / 2;         while (p) {           p /= 2;           h += 1;         }         addNode(1, k, h - 1, e);       }     }     return (EXIT_SUCCESS);   }   