func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 212345, OFFSET = 3;   struct BITree {     long long a[MAXN];     void clear() { memset(a, 0, sizeof(a)); }     int lowbit(int i) { return (i & -i); }     long long sum(int i) {       long long ret = 0;       for (i += OFFSET; i > 0; i -= lowbit(i)) ret += a[i];       return ret;     }     void add(int i, long long d) {       for (i += OFFSET; i < MAXN; i += lowbit(i)) a[i] += d;     }   } cnt, sum;   int h[MAXN];   vector<pair<int, long long> > qq;   vector<int> H;   int find(int h) { return lower_bound(H.begin(), H.end(), h) - H.begin(); }   int main() {     int n, q;     scanf( %d%d , &n, &q);     for (int i = 0; i < int(n); i++) scanf( %d , h + i);     qq.resize(q);     H = vector<int>(h, h + n);     for (int i = 0; i < int(q); i++) {       int t;       scanf( %d , &t);       if (t == 1) {         int p, x;         scanf( %d%d , &p, &x);         qq[i].first = p - 1;         qq[i].second = x;         H.push_back(x);       } else {         long long v;         scanf( %I64d , &v);         qq[i].first = -1;         qq[i].second = v;       }     }     sort(H.begin(), H.end());     H.resize(unique(H.begin(), H.end()) - H.begin());     cnt.clear();     sum.clear();     for (int i = 0; i < int(n); i++) {       h[i] = find(h[i]);       cnt.add(h[i], 1);       sum.add(h[i], H[h[i]]);     }     for (int i = 0; i < int(q); i++) {       if (~qq[i].first) {         int j = qq[i].first;         cnt.add(h[j], -1);         sum.add(h[j], -H[h[j]]);         h[j] = find(qq[i].second);         cnt.add(h[j], 1);         sum.add(h[j], H[h[j]]);       } else {         long long v = qq[i].second;         int l = 0, r = H.size() - 1;         while (l < r) {           int m = (l + r + 1) / 2;           int tot = cnt.sum(m);           long long vol = sum.sum(m);           if (H[m] * (long long)tot - vol < v)             l = m;           else             r = m - 1;         }         int tot = cnt.sum(l);         long long vol = sum.sum(l);         printf( %.10f n ,                H[l] + (v - (H[l] * (long long)tot - vol)) / (double)tot);       }     }   }   