#include <bits/stdc++.h>
#pragma GCC optimize("O2,unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,mmx,avx,avx2")
using namespace std;
struct Frac {
  long long n = 0, d = 0;
  Frac() {}
  Frac(long long nn, long long nd) {
    n = nn;
    d = nd;
  }
  Frac operator+(const Frac& f) const {
    long long nn = n * f.d + d * f.n;
    long long nd = f.d * d;
    return Frac(nn, nd);
  }
  Frac operator-(const Frac& f) const {
    long long nn = n * f.d - d * f.n;
    long long nd = f.d * d;
    return Frac(nn, nd);
  }
  Frac operator*(const Frac& f) const {
    long long nn = n * f.n, nd = d * f.d;
    return Frac(nn, nd);
  }
  Frac operator/(const Frac& f) const {
    long long nn = n * f.d, nd = d * f.n;
    return Frac(nn, nd);
  }
  bool operator==(const Frac& f) const { return n * f.d == d * f.n; }
  bool operator<(const Frac& f) const { return n * f.d < d * f.n; }
  bool operator>(const Frac& f) const { return n * f.d > d * f.n; }
  bool operator<=(const Frac& f) const { return n * f.d <= d * f.n; }
  bool operator>=(const Frac& f) const { return n * f.d >= d * f.n; }
  bool operator!=(const Frac& f) const { return n * f.d != d * f.n; }
  double val() { return n / (long double)d; }
};
const int MAXN = 1e6 + 5;
Frac f[MAXN];
int a[MAXN];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  std::cout << std::fixed << std::setprecision(20);
  int n;
  cin >> n;
  deque<Frac> s;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    f[i] = {a[i], 1};
    while (s.size() && s.back() > f[i]) {
      f[i].n += s.back().n;
      f[i].d += s.back().d;
      s.pop_back();
    }
    s.push_back(f[i]);
  }
  for (int i = 1; i <= n; i++) {
    cout << s.front().val() << '\n';
    if (s.front() == f[i]) {
      s.pop_front();
    }
  }
}
