#include <bits/stdc++.h>
using namespace std;
const int N = 5e6 + 1;
const int mod = 1e9 + 7;
int n;
int sz[N], p[N], mn[N], mx[N];
double sum[N], ar[N];
void init() {
  for (int i = 0; i < n + 2; i++) {
    sz[i] = 1, p[i] = i;
    mx[i] = mn[i] = i;
    sum[i] = ar[i];
  }
}
int get(int x) {
  while (x != p[x]) {
    x = p[x] = p[p[x]];
  }
  return x;
}
queue<int> pending;
bool inq[N];
void join(int x, int y) {
  x = get(x);
  y = get(y);
  if (x == y) return;
  if (!inq[x]) {
    pending.push(x);
  }
  p[y] = x;
  sum[x] += sum[y];
  sz[x] += sz[y];
  mx[x] = max(mx[x], mx[y]);
  mn[x] = min(mn[x], mn[y]);
  ar[x] = sum[x] / sz[x];
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lf", &ar[i]);
    p[i] = i;
  }
  init();
  for (int i = 2; i <= n; i++) {
    int x = i, y = get(i - 1);
    if (ar[x] <= ar[y]) {
      join(x, y);
    }
  }
  while (!pending.empty()) {
    int top = pending.front();
    pending.pop();
    inq[top] = 0;
    if (mn[top] > 1) {
      int y = get(mn[top] - 1);
      if (ar[top] <= ar[y]) {
        join(top, y);
      }
    }
    if (mx[top] < n) {
      int x = get(mx[top] + 1);
      if (ar[x] <= ar[top]) {
        join(x, top);
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    printf("%.9lf\n", ar[get(i)]);
  }
  return 0;
}
