#include <bits/stdc++.h>
using namespace std;
template <typename A, typename B>
ostream& operator<<(ostream& cout, pair<A, B> const& p) {
  return cout << "(" << p.first << ", " << p.second << ")";
}
template <typename A>
ostream& operator<<(ostream& cout, vector<A> const& v) {
  for (int i = 0; i < v.size(); i++) {
    printf("%.9f\n", v[i]);
  }
  return cout << "";
}
void fast_io() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
}
void file_io(string taskname) {
  string fin = taskname + ".in";
  string fout = taskname + ".out";
  const char* FIN = fin.c_str();
  const char* FOUT = fout.c_str();
  freopen(FIN, "r", stdin);
  freopen(FOUT, "w", stdout);
  fast_io();
}
int n;
vector<long long> a;
vector<long long> prefix;
stack<pair<int, int> > second;
long long sum(pair<int, int> p) {
  return prefix[p.second] - (p.first > 0 ? prefix[p.first - 1] : 0);
}
bool worth(pair<int, int> p1, pair<int, int> p2) {
  return sum(p1) * (p2.second - p2.first + 1) >=
         sum(p2) * (p1.second - p1.first + 1);
}
pair<int, int> join(pair<int, int> p1, pair<int, int> p2) {
  return make_pair(min(p1.first, p2.first), max(p1.second, p2.second));
}
int main() {
  fast_io();
  int n;
  cin >> n;
  a = vector<long long>(n);
  prefix = vector<long long>(n);
  for (int i = 0; i < (n); i++) {
    cin >> a[i];
  }
  prefix[0] = a[0];
  for (int i = 1; i < n; i++) {
    prefix[i] = a[i] + prefix[i - 1];
  }
  for (int i = 0; i < (n); i++) {
    pair<int, int> curr = make_pair(i, i);
    while (second.size() > 0 && worth(second.top(), curr)) {
      curr = join(second.top(), curr);
      second.pop();
    }
    second.push(curr);
  }
  vector<double> ans(n);
  while (second.size() > 0) {
    pair<int, int> p = second.top();
    second.pop();
    if (p.first == p.second) {
      ans[p.first] = a[p.first];
    } else {
      double val = ((double)sum(p)) / (p.second - p.first + 1);
      for (int i = p.first; i <= p.second; i++) {
        ans[i] = val;
      }
    }
  }
  cout << ans;
}
