#include <bits/stdc++.h>
using namespace std;
const long long MAX = (1 << 17);
struct BIT {
  vector<long long> v;
  long long sz;
  void Resize(long long len) {
    sz = len;
    v.resize(sz, 0);
  }
  void Update(long long idx, long long val) {
    for (; idx < sz; idx += idx & -idx) v[idx] += val;
  }
  long long query(long long idx) {
    long long sum = 0;
    for (; idx > 0; idx -= idx & -idx) sum += v[idx];
    return sum;
  }
  long long findId(long long cum) {
    long long bitMask = 1, ans = 0;
    while (bitMask * 2 < sz) bitMask <<= 1;
    while (bitMask != 0) {
      long long tid = ans + bitMask;
      if (v[tid] < cum) cum -= v[tid], ans = tid;
      bitMask >>= 1;
    }
    return ans + 1;
  }
} Fre, Sum;
struct query {
  long long t, p, x;
  query() {}
  query(long long a, long long b, long long c) : t(a), p(b), x(c) {}
} q[2 * MAX];
map<long long, long long> Map;
long long Index[2 * MAX], Last[2 * MAX], Val[2 * MAX];
long long N, M;
bool Check(long long id, long long cost) {
  if (id == 1) return true;
  long long sum1 = Sum.query(id), fre1 = Fre.query(id);
  long long sum2 = Sum.query(id - 1), fre2 = Fre.query(id - 1);
  double val1 = (double)(sum1 + cost) / (double)fre1;
  double val2 = (double)(sum2 + cost) / (double)fre2;
  if (val1 < val2) return true;
  return false;
}
void solve() {
  cin >> N >> M;
  long long a, b, c;
  for (long long i = 1; i <= N; ++i) cin >> a, q[i] = query(1, i, a), ++Map[a];
  for (long long i = 1; i <= M; ++i) {
    cin >> a >> b;
    if (a == 1) cin >> c, ++Map[c];
    q[i + N] = query(a, b, c);
  }
  long long Count = 0;
  for (map<long long, long long>::iterator it = Map.begin(); it != Map.end();
       ++it)
    it->second = (Count += it->second);
  for (long long i = N + M; i > 0; --i)
    if (q[i].t == 1) Index[i] = Map[q[i].x], Val[Map[q[i].x]--] = q[i].x;
  Fre.Resize(2 * MAX);
  Sum.Resize(2 * MAX);
  for (long long i = 1; i <= N + M; ++i) {
    if (q[i].t == 1) {
      long long id = Index[i], v = Last[q[i].p];
      if (v != 0) Fre.Update(v, -1), Sum.Update(v, -Val[v]);
      ;
      Fre.Update(id, 1), Sum.Update(id, Val[id]);
      Last[q[i].p] = id;
    } else {
      long long cost = q[i].p;
      long long st = 1, en = N;
      while (st < en) {
        long long mid = ((st + en) >> 1) + 1;
        long long id = Fre.findId(mid);
        if (Check(id, cost))
          st = mid;
        else
          en = mid - 1;
      }
      long long id = Fre.findId(st);
      long long sum = Sum.query(id), fre = Fre.query(id);
      double Ans = (double)(sum + cost) / (double)fre;
      printf("%0.5lf\n", Ans);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  solve();
  return 0;
}
