#include <bits/stdc++.h>
using namespace std;
const int N = 1000010;
int n, f[N], cnt;
double a[N], b[N];
struct node {
  int l, r;
  double sum;
};
double qs(node c) { return c.sum * (c.r - c.l + 1); }
stack<node> s;
void update(int x) {
  node q = (node){s.top().l, x, (qs(s.top()) + a[x]) / (x - s.top().l + 1)};
  s.pop();
  while (!s.empty() && q.sum < s.top().sum) {
    node w = s.top();
    s.pop();
    q.sum = ((qs(q) + qs(w)) / (q.r - w.l + 1));
    q.l = w.l;
  }
  s.push(q);
  return;
}
void print() {
  while (!s.empty()) {
    node wz = s.top();
    s.pop();
    for (int i = wz.l; i <= wz.r; i++) {
      b[i] = wz.sum;
    }
  }
  for (int i = 1; i <= n; i++) {
    printf("%.9lf\n", b[i]);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lf", &a[i]);
  }
  s.push((node){1, 1, a[1]});
  for (int i = 2; i <= n; i++) {
    if (a[i] > s.top().sum)
      s.push((node){i, i, a[i]});
    else
      update(i);
  }
  print();
  return 0;
}
