#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const double PI = acos(-1.0);
int sgn(double x) {
  if (fabs(x) < eps) return 0;
  if (x < 0)
    return -1;
  else
    return 1;
}
struct Point {
  double x, y;
  Point() {}
  Point(double _x, double _y) {
    x = _x;
    y = _y;
  }
  Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }
  double operator^(const Point &b) const { return x * b.y - y * b.x; }
  double operator*(const Point &b) const { return x * b.x + y * b.y; }
  void transXY(double B) {
    double tx = x, ty = y;
    x = tx * cos(B) - ty * sin(B);
    y = tx * sin(B) + ty * cos(B);
  }
};
double dist(Point a, Point b) { return sqrt((a - b) * (a - b)); }
const int MAXN = 1000010;
Point nod[MAXN];
int Stack[MAXN], top;
bool _cmp(Point p1, Point p2) {
  double tmp = (p1 - nod[0]) ^ (p2 - nod[0]);
  if (sgn(tmp) > 0)
    return true;
  else if (sgn(tmp) == 0 && sgn(dist(p1, nod[0]) - dist(p2, nod[0])) <= 0)
    return true;
  else
    return false;
}
void Graham(int n) {
  sort(nod + 1, nod + n, _cmp);
  if (n == 1) {
    top = 1;
    Stack[0] = 0;
    Stack[1] = 1;
    return;
  }
  Stack[0] = 0;
  Stack[1] = 1;
  top = 2;
  for (int i = 2; i < n; ++i) {
    while (top > 1 && sgn((nod[Stack[top - 1]] - nod[Stack[top - 2]]) ^
                          (nod[i] - nod[Stack[top - 2]])) <= 0)
      --top;
    Stack[top++] = i;
  }
}
long long a[MAXN];
int main() {
  int n;
  scanf("%d", &n);
  ++n;
  for (int i = 1; i < n; ++i) {
    scanf("%lld", &a[i]);
  }
  nod[0] = {0, 0};
  for (int i = 1; i < n; ++i) {
    a[i] += a[i - 1];
    nod[i] = {double(i), double(a[i])};
  }
  Graham(n);
  int cnt = 0;
  for (cnt = 0; cnt < top; ++cnt) {
    if (nod[Stack[cnt]].x == n - 1) break;
  }
  for (int i = 1; i <= cnt; ++i) {
    int line = nod[Stack[i]].x - nod[Stack[i - 1]].x;
    double v = (nod[Stack[i]].y - nod[Stack[i - 1]].y) / line;
    for (int j = 0; j < line; ++j) {
      printf("%.9lf\n", v);
    }
  }
  return 0;
}
