#include <bits/stdc++.h>
using namespace std;
long long f[100010 << 1];
int c[100010 << 1], sz, h[100010];
struct node {
  int k, first, v;
  long long w;
} a[100010];
void update(int first, int v, int d) {
  while (first <= sz) f[first] += v, c[first] += d, first += first & -first;
}
pair<long long, int> query(int first) {
  long long ans = 0;
  int res = 0;
  while (first > 0) ans += f[first], res += c[first], first -= first & -first;
  return make_pair(ans, res);
}
vector<int> v;
double cal(int first, long long v) {
  first = min(first, sz);
  pair<long long, int> a = query(first);
  if (a.second == 0) return 1e16;
  return (v + a.first + 0.0) / (a.second);
}
int main() {
  int T, i, j, ca = 0, m, k, n;
  while (~scanf("%d%d", &n, &m)) {
    v.clear();
    for (i = 1; i <= n; i++) scanf("%d", &h[i]), v.push_back(h[i]);
    for (i = 0; i < m; i++) {
      scanf("%d", &k);
      a[i].k = k;
      if (k == 1) {
        scanf("%d%d", &j, &a[i].v);
        v.push_back(a[i].v);
        a[i].first = j;
      } else
        scanf("%I64d", &a[i].w);
    }
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    sz = v.size();
    for (i = 1; i <= n; i++) {
      j = lower_bound(v.begin(), v.end(), h[i]) - v.begin() + 1;
      update(j, h[i], 1);
    }
    for (i = 0; i < m; i++)
      if (a[i].k == 1) {
        j = lower_bound(v.begin(), v.end(), h[a[i].first]) - v.begin() + 1;
        update(j, -h[a[i].first], -1);
        h[a[i].first] = a[i].v;
        j = lower_bound(v.begin(), v.end(), h[a[i].first]) - v.begin() + 1;
        update(j, h[a[i].first], 1);
      } else {
        int l = 1, r = sz, first, second;
        pair<long long, int> e = query(sz);
        double ans = (e.first + a[i].w) * 1. / n;
        while (l <= r) {
          first = (l + r) / 2;
          pair<long long, int> e = query(first);
          if (e.second == 0)
            l = first + 1;
          else if (e.second == n)
            r = first - 1;
          else {
            long long s = (e.first + a[i].w);
            if (s <= (long long)v[first] * e.second)
              ans = s * 1. / e.second, r = first - 1;
            else
              l = first + 1;
          }
        }
        printf("%lf\n", ans);
      }
  }
  return 0;
}
