func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, q;   int a[100005];   long long tree[2 * 100005], tree2[2 * 100005];   vector<long long> mapa;   int mp(double val) {     return upper_bound(mapa.begin(), mapa.end(), val) - mapa.begin();   }   void update(int pos, int val) {     for (int i = pos; i < 2 * 100005; i += i & -i) tree[i] += val;   }   void update2(int pos, int val) {     for (int i = pos; i < 2 * 100005; i += i & -i) tree2[i] += val;   }   void upd(int pos, int val) {     int posi = mp(a[pos - 1]);     update(posi, -a[pos - 1]);     update2(posi, -1);     a[pos - 1] = val;     posi = mp(val);     update(posi, val);     update2(posi, 1);   }   long long query(int pos) {     long long res = 0;     for (int i = pos; i > 0; i -= i & -i) res += tree[i];     return res;   }   long long query2(int pos) {     long long res = 0;     for (int i = pos; i > 0; i -= i & -i) res += tree2[i];     return res;   }   long double f(long double x) {     double res;     int pos = mp(x);     res = x * query2(pos) - query(pos);     return res;   }   struct quer {     int t, p;     long long v;     quer(){};     quer(int t, int p, long long v) : t(t), p(p), v(v){};   } qry[100005];   int main() {     scanf( %d%d , &n, &q);     for (int i = 0; i < n; i++) scanf( %d , a + i), mapa.push_back(a[i]);     for (int i = 0, t, p = 0; i < q; i++) {       long long v;       cin >> t;       if (t == 1)         cin >> p >> v, mapa.push_back(v);       else         cin >> v;       qry[i] = quer(t, p, v);     }     sort(mapa.begin(), mapa.end());     mapa.resize(unique(mapa.begin(), mapa.end()) - mapa.begin());     for (int i = 0; i < n; i++) {       int posi = mp(a[i]);       update(posi, a[i]);       update2(posi, 1);     }     for (int i = 0; i < q; i++) {       quer Q = qry[i];       if (Q.t == 1) {         upd(Q.p, Q.v);       } else {         double l = 0, r = 1000000001;         while (l + 1e-5 <= r) {           double m = l + (r - l) / 2;           if (f(m) < Q.v)             l = m + 1e-5;           else             r = m;         }         if (abs(l - 1000000001) <= 1e-5 && abs(f(l) - Q.v) > 1e-5) {           l = 1.0 * (Q.v + query(2 * 100005 - 1)) / n;         }         printf( %.5lf n , l);       }     }     return 0;   }   