#include <bits/stdc++.h>
using namespace std;
namespace yspm {
inline long long read() {
  long long res = 0, f = 1;
  char k;
  while (!isdigit(k = getchar()))
    if (k == '-') f = -1;
  while (isdigit(k)) res = res * 10 + k - '0', k = getchar();
  return res * f;
}
const long long N = 1e6 + 10;
long long a[N], n, cnt;
struct node {
  long long l, r, sum;
} e[N];
signed main() {
  n = read();
  for (long long i = 1; i <= n; ++i) a[i] = read();
  for (long long i = 1; i <= n; i = e[cnt].r + 1) {
    e[++cnt].l = i, e[cnt].r = i;
    e[cnt].sum = a[i];
    while (1) {
      long long tl = e[cnt].l, tr = e[cnt].r, tsum = e[cnt].sum,
                now = e[cnt].sum + a[e[cnt].r + 1];
      if (tr < n && now * (tr - tl + 1) < tsum * (tr - tl + 2)) {
        e[cnt].sum = now;
        e[cnt].r++;
      } else
        break;
    }
    while (cnt > 1 && e[cnt].sum * (e[cnt - 1].r - e[cnt - 1].l + 1) <
                          e[cnt - 1].sum * (e[cnt].r - e[cnt].l + 1)) {
      e[cnt - 1].sum += e[cnt].sum;
      e[cnt - 1].r = e[cnt].r;
      --cnt;
    }
  }
  for (long long i = 1; i <= cnt; ++i) {
    double tmp = (double)e[i].sum / ((double)e[i].r - e[i].l + 1);
    for (long long j = e[i].l; j <= e[i].r; ++j) {
      printf("%.12lf\n", tmp);
    }
  }
  return 0;
}
}  // namespace yspm
signed main() { return yspm::main(); }
