/*
贪心:一开始所有点都看成一个独立区间,从后往前遍历每一个点,用一个栈(显然是单调递增的)维护后面的点组成的区间
如果该点的值超过 队首的区间平均值,那么进行合并
*/
#include<bits/stdc++.h>
using namespace std;
#define N 2000005
#define db double
int n,F[N];
db a[N],avg[N],size[N],sum[N];
int find(int x){
return F[x]==x?x:F[x]=find(F[x]);
}
void bing(int u,int v){
int fu=find(u),fv=find(v);
if(fu!=fv){
size[fu]+=size[fv];
sum[fu]+=sum[fv];
avg[fu]=sum[fu]/size[fu];
F[fv]=fu;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)scanf("%lf",&a[i]);
for(int i=1;i<=n;i++)
F[i]=i,size[i]=1,avg[i]=sum[i]=a[i];
stack<int>q;
for(int i=n;i>=1;i--){
if(q.empty()){q.push(i);continue;}
q.push(i);
while(q.size()>=2){
int u=q.top();q.pop();
int v=q.top();q.pop();
int fu=find(u),fv=find(v);
if(avg[v]>avg[u]){
q.push(fv);
q.push(fu);
break;
}else {
bing(fu,fv);
q.push(fu);
}
}
}
for(int i=1;i<=n;i++)
printf("%.10lf\n",avg[find(i)]);
}