func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 4e5 + 5;   int n;   int fa[N], r[N];   int rt[N], ls[N * 30], rs[N * 30], siz[N * 30], tot;   long long sum[N * 30], ans;   void update(int &rt, int l, int r, int p) {     if (!rt) rt = ++tot;     if (l == r) {       siz[rt] = 1, sum[rt] = p;       return;     }     int mid = (l + r) >> 1;     if (p <= mid)       update(ls[rt], l, mid, p);     else       update(rs[rt], mid + 1, r, p);     siz[rt] = siz[ls[rt]] + siz[rs[rt]];     sum[rt] = sum[ls[rt]] + sum[rs[rt]];   }   int merge(int x, int y) {     if (!x || !y) return x | y;     ans -= sum[ls[x]] * siz[rs[x]] + sum[ls[y]] * siz[rs[y]];     ls[x] = merge(ls[x], ls[y]);     rs[x] = merge(rs[x], rs[y]);     ans += sum[ls[x]] * siz[rs[x]];     siz[x] += siz[y];     sum[x] += sum[y];     return x;   }   inline int findf(int x) { return x == fa[x] ? x : fa[x] = findf(fa[x]); }   void unify(int x, int y) {     x = findf(x), y = findf(y);     fa[y] = x;     ans -= sum[rt[x]] * x + sum[rt[y]] * y;     rt[x] = merge(rt[x], rt[y]);     ans += sum[rt[x]] * x;     r[x] = r[y];   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= 400000; i++) fa[i] = i, r[i] = i;     for (int i = 1, a, b; i <= n; i++) {       scanf( %d%d , &a, &b);       int p = rt[a] ? r[findf(a)] + 1 : a;       ans -= 1ll * a * b;       ans += 1ll * p * b;       update(rt[p], 1, n, b);       if (rt[p - 1]) unify(p - 1, p);       if (rt[p + 1]) unify(p, p + 1);       printf( %lld n , ans);     }     return 0;   }   