func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 300005, N = 333333;   const int D = 1e9 + 7, inv2 = 5e8 + 4;   int n, Q, a[MAXN], mul[N + 233], inv[N + 233];   int val[MAXN << 1];   int id[MAXN], w[MAXN];   int tim, len;   struct node {     int v, id;     node() {}     node(int vv, int ii) { v = vv, id = ii; }   } s[MAXN << 1];   bool operator<(const node &aa, const node &bb) {     if (aa.v != bb.v) return aa.v < bb.v;     return aa.id < bb.id;   }   int v0[MAXN << 4], v1[MAXN << 4], sum[MAXN << 4], cnt[MAXN << 4];   void up(int p) {     cnt[p] = cnt[p << 1] + cnt[p << 1 | 1];     sum[p] = (sum[p << 1] + sum[p << 1 | 1] +               1ll * v0[p << 1] * v1[p << 1 | 1] % D * inv[cnt[p << 1]]) %              D;     v0[p] = (v0[p << 1] + 1ll * v0[p << 1 | 1] * mul[cnt[p << 1]]) % D;     v1[p] = (v1[p << 1] + 1ll * v1[p << 1 | 1] * inv[cnt[p << 1]]) % D;   }   void insert(int p, int l, int r, int x) {     if (l == r) {       cnt[p] = 1, sum[p] = 0;       v0[p] = val[x];       v1[p] = 1ll * val[x] * inv[1] % D;       return;     }     int mid = (l + r) >> 1;     if (x <= mid)       insert(p << 1, l, mid, x);     else       insert(p << 1 | 1, mid + 1, r, x);     up(p);   }   void remove(int p, int l, int r, int x) {     if (l == r) return (void)(cnt[p] = sum[p] = v0[p] = v1[p] = 0);     int mid = (l + r) >> 1;     if (x <= mid)       remove(p << 1, l, mid, x);     else       remove(p << 1 | 1, mid + 1, r, x);     up(p);   }   int main() {     mul[0] = inv[0] = 1;     for (int i = 1; i <= N; i++) mul[i] = mul[i - 1] * 2 % D;     for (int i = 1; i <= N; i++) inv[i] = 1ll * inv[i - 1] * inv2 % D;     scanf( %d , &n);     tim = -n;     for (int i = 1; i <= n; i++) scanf( %d , &a[i]), s[++len] = node(a[i], ++tim);     scanf( %d , &Q);     for (int i = 1; i <= Q; i++) {       scanf( %d%d , &id[i], &w[i]);       s[++len] = node(w[i], ++tim);     }     sort(s + 1, s + len + 1);     for (int i = 1; i <= len; i++) {       val[i] = s[i].v;       if (s[i].id <= 0)         a[s[i].id + n] = i;       else         w[s[i].id] = i;     }     for (int i = 1; i <= n; i++) insert(1, 1, len, a[i]);     printf( %d n , sum[1]);     for (int i = 1; i <= Q; i++) {       remove(1, 1, len, a[id[i]]);       insert(1, 1, len, w[i]);       a[id[i]] = w[i];       printf( %d n , sum[1]);     }     return 0;   }   