#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  bool op = 0;
  char c = getchar();
  while (!isdigit(c)) op |= (c == '-'), c = getchar();
  while (isdigit(c)) x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
  return op ? -x : x;
}
const int N = 1000010;
int n;
double a[N];
struct Node {
  int l, r;
  double val;
  Node() { l = r = val = 0; }
  Node(int l = 0, int r = 0, double val = 0) : l(l), r(r), val(val) {}
};
stack<Node> s;
double sum(Node a) { return a.val * (a.r - a.l + 1); }
void update(int x) {
  Node p = Node(s.top().l, x, (sum(s.top()) + a[x]) / (x - s.top().l + 1));
  s.pop();
  while (s.empty() == false && p.val < s.top().val) {
    Node cur = s.top();
    s.pop();
    p.val = (sum(p) + sum(cur)) / (p.r - cur.l + 1);
    p.l = cur.l;
  }
  s.push(p);
  return;
}
void print() {
  if (s.empty() == true) return;
  Node tmp = s.top();
  s.pop();
  print();
  for (int i = tmp.l; i <= tmp.r; i++) printf("%.9lf\n", tmp.val);
  return;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) a[i] = read();
  for (int i = 1; i <= n; i++) {
    if (s.empty() == true || a[i] > s.top().val)
      s.push(Node(i, i, a[i]));
    else
      update(i);
  }
  print();
  return 0;
}
