#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
long long sum[N], cc[N];
void update(long long *t, int x, int add) {
  assert(x > 0);
  while (x < N) t[x] += add, x += x & (-x);
}
long long qq(long long *t, int x) {
  long long ret = 0;
  while (x) ret += t[x], x = x & (x - 1);
  return ret;
}
int type[N / 2], h[N / 2], x[N / 2], w[N];
long long v[N / 2];
int main() {
  int ind, u, p = 1, n, q, i, j, c, m, l, r, mid;
  scanf("%d%d", &n, &q);
  for (i = 1; i <= n; ++i) scanf("%d", &h[i]), w[p++] = h[i];
  for (i = 0; i < q; ++i) {
    scanf("%d%I64d", &type[i], &v[i]);
    if (type[i] == 1) scanf("%d", &x[i]), w[p++] = x[i];
  }
  sort(w + 1, w + p);
  m = unique(w + 1, w + p) - w - 1;
  for (i = 1; i <= n; ++i) {
    h[i] = lower_bound(w + 1, w + m + 1, h[i]) - w;
    update(sum, h[i], w[h[i]]);
    update(cc, h[i], 1);
  }
  for (i = 0; i < q; ++i) {
    if (type[i] == 1) {
      ind = v[i];
      update(sum, h[ind], -w[h[ind]]);
      update(cc, h[ind], -1);
      h[ind] = lower_bound(w + 1, w + m + 1, x[i]) - w;
      update(sum, h[ind], w[h[ind]]);
      update(cc, h[ind], 1);
    } else {
      l = 1, r = m;
      while (l < r) {
        mid = (l + r + 1) >> 1;
        if (qq(cc, mid) * w[mid] - qq(sum, mid) >= v[i])
          r = mid - 1;
        else
          l = mid;
      }
      printf("%0.9lf\n", (double)(qq(sum, l) + v[i]) / qq(cc, l));
    }
  }
}
