#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000100;
const int mod = 1000000007;
struct node {
  int l, r;
  double ave;
  node() {}
  node(int a, int b, double c) : l(a), r(b), ave(c) {}
  bool operator<(node b) const { return ave > b.ave; }
};
int a[maxn], b[maxn], l[maxn];
double ans[maxn], c[maxn];
int main() {
  int n, i, j, k, up;
  priority_queue<node> que;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    l[i] = i, c[i] = a[i];
    que.push(node(i, i, a[i]));
  }
  up = 1;
  while (!que.empty()) {
    node p = que.top();
    que.pop();
    if (l[p.r] == -1) continue;
    if (p.l == up) {
      for (i = p.l; i <= p.r; i++) ans[i] = p.ave;
      up = p.r + 1;
    } else {
      p.ave = (p.ave * (p.r - p.l + 1) + c[p.l - 1] * (p.l - l[p.l - 1])) /
              (p.r - l[p.l - 1] + 1);
      c[p.r] = p.ave;
      l[p.r] = l[p.l - 1];
      l[p.l - 1] = -1;
      p.l = l[p.r];
      que.push(p);
    }
  }
  for (i = 1; i <= n; i++) printf("%.10f\n", ans[i]);
  return 0;
}
