func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = (int)1e5 * 2 + 7;   int a[maxn], b[maxn], t[4 * maxn], n, W, H;   void build(int v, int l, int r) {     if (r - l == 1) {       t[v] = a[l];       return;     }     build(2 * v + 1, l, (l + r) / 2);     build(2 * v + 2, (l + r) / 2, r);     t[v] = max(t[2 * v + 1], t[2 * v + 2]);   }   int get(int v, int l, int r, int ql, int qr) {     if (ql <= l && qr >= r) return t[v];     if (ql >= r || qr <= l) return 0;     return max(get(2 * v + 1, l, (l + r) / 2, ql, qr),                get(2 * v + 2, (l + r) / 2, r, ql, qr));   }   void upd(int v, int l, int r, int pos, int x) {     if (r - l == 1) {       t[v] = x;       return;     }     if (pos < (l + r) / 2) {       upd(2 * v + 1, l, (l + r) / 2, pos, x);     } else {       upd(2 * v + 2, (l + r) / 2, r, pos, x);     }     t[v] = max(t[2 * v + 1], t[2 * v + 2]);   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) {       int ww, hh;       scanf( %d %d , &ww, &hh);       a[i] = hh;       b[i] = ww;       W += ww;     }     build(0, 0, n);     for (int i = 0; i < n; i++) {       W -= b[i];       upd(0, 0, n, i, -10000);       H = get(0, 0, n, 0, n);       printf( %d  , H * W);       W += b[i];       upd(0, 0, n, i, a[i]);     }     return 0;   }   