func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 110000;   long long init[N], tab[N * 2], ope[N][3], ch[N], h[N], num[N * 8], sum[N * 8],       ans[N * 8], nn, ss, aa;   bool ini[N * 2];   int sz = 0;   inline void Update(int x, int l, int r) {     if (l == r) return;     int lc = (x << 1), rc = lc + 1;     sum[x] = sum[lc] + sum[rc];     num[x] = num[lc] + num[rc];     ans[x] = ans[lc] + ans[rc] + num[lc] * sum[rc] - num[rc] * sum[lc];   }   inline void Build(int x, int l, int r) {     if (l == r) {       if (ini[l]) {         num[x] = 1;         sum[x] = tab[l];         ans[x] = 0;       }       return;     }     int mid = (l + r) >> 1, lc = (x << 1), rc = lc + 1;     Build(lc, l, mid);     Build(rc, mid + 1, r);     Update(x, l, r);   }   inline void Insert(int x, int l, int r, int pos, int tp) {     if (l == r) {       if (tp == 1) {         num[x] = 1;         sum[x] = tab[l];         ans[x] = 0;       } else         num[x] = sum[x] = ans[x] = 0;       return;     }     int mid = (l + r) >> 1;     if (pos <= mid)       Insert(x << 1, l, mid, pos, tp);     else       Insert(x << 1 | 1, mid + 1, r, pos, tp);     Update(x, l, r);   }   inline void Query(int x, int l, int r, int a, int b) {     if (l > r) return;     if (l == a && r == b) {       aa = aa + ans[x] + nn * sum[x] - num[x] * ss;       nn += num[x];       ss += sum[x];       return;     }     if (l == r) return;     int mid = (l + r) >> 1;     if (b <= mid)       Query(x << 1, l, mid, a, b);     else if (a > mid)       Query(x << 1 | 1, mid + 1, r, a, b);     else       Query(x << 1, l, mid, a, mid), Query(x << 1 | 1, mid + 1, r, mid + 1, b);   }   int main() {     int n, q;     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %I64d , &init[i]);       tab[i] = ch[i] = h[i] = init[i];     }     sz = n;     scanf( %d , &q);     for (int i = 1; i <= q; i++) {       scanf( %I64d%I64d%I64d , &ope[i][0], &ope[i][1], &ope[i][2]);       if (ope[i][0] == 1) {         ch[ope[i][1]] += ope[i][2];         tab[++sz] = ch[ope[i][1]];       }     }     sort(init + 1, init + n + 1);     sort(tab + 1, tab + sz + 1);     unique(tab + 1, tab + sz + 1);     for (int i = 1; i <= sz; i++)       if (tab[i] > tab[i + 1]) sz = i;     int p = 1;     for (int i = 1; i <= n; i++) {       while (tab[p] != init[i] && p <= sz) p++;       ini[p] = 1;     }     Build(1, 1, sz);     int l, r;     for (int i = 1; i <= q; i++) {       if (ope[i][0] == 2) {         l = std::lower_bound(tab + 1, tab + sz + 1, ope[i][1]) - tab;         while (tab[l] < ope[i][1] && l <= sz) l++;         if (l == 0) l = 1;         if (l > sz) {           printf( 0 n );           continue;         }         r = std::lower_bound(tab + 1, tab + sz + 1, ope[i][2]) - tab;         if (r > sz) r = sz;         while (tab[r] > ope[i][2] && r >= 1) r--;         if (r <= 0) {           printf( 0 n );           continue;         }         nn = ss = aa = 0;         Query(1, 1, sz, l, r);         printf( %I64d n , aa);       } else {         l = std::lower_bound(tab + 1, tab + sz + 1, h[ope[i][1]]) - tab;         h[ope[i][1]] += ope[i][2];         r = std::lower_bound(tab + 1, tab + sz + 1, h[ope[i][1]]) - tab;         Insert(1, 1, sz, l, -1);         Insert(1, 1, sz, r, 1);       }     }     return 0;   }   