func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize(2)   using namespace std;   const int inf = 0x3f3f3f3f;   const long long INF = 0x3f3f3f3f3f3f3f3f;   char buf[1 << 21], *p1 = buf, *p2 = buf;   inline int gc() {     return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2)                ? EOF                : *p1++;   }   inline int read() {     int ret = 0, f = 0;     char c = gc();     while (!isdigit(c)) {       if (c ==  - ) f = 1;       c = gc();     }     while (isdigit(c)) {       ret = ret * 10 + c - 48;       c = gc();     }     if (f) return -ret;     return ret;   }   int sign(double x) {     if (x > 1e8)       return 1;     else if (x < -1e8)       return -1;     else       return 0;   }   const int maxn = 1e6 + 10;   int a[maxn];   pair<double, int> st[maxn];   double pre[maxn];   int precnt[maxn];   int top;   int erfen(int l, int r, double val) {     while (l + 1 < r) {       int mid = l + r >> 1;       if ((pre[top] - pre[mid - 1] + val) * 1.0 /               (precnt[top] - precnt[mid - 1] + 1) <=           st[mid].first)         r = mid;       else         l = mid;     }     return r;   }   int main() {     int n;     scanf( %d , &n);     for (int i = (1); i <= (n); i++) {       scanf( %d , &a[i]);     }     st[++top] = make_pair(a[1] * 1.0, 1);     pre[top] = a[1];     precnt[top] = 1;     for (int i = (2); i <= (n); i++) {       if (a[i] * 1.0 == st[top].first) {         st[top].second++;         pre[top] += a[i];         precnt[top]++;       } else if (a[i] * 1.0 > st[top].first) {         st[++top] = make_pair(a[i] * 1.0, 1);         pre[top] = pre[top - 1] + a[i];         precnt[top] = precnt[top - 1] + 1;       } else {         int id = erfen(0, top + 1, a[i]);         int cnt = (precnt[top] - precnt[id - 1] + 1);         double tmp = pre[top] - pre[id - 1] + a[i];         double evenly = (pre[top] - pre[id - 1] + a[i]) * 1.0 /                         (precnt[top] - precnt[id - 1] + 1);         top = id;         st[top].first = evenly;         st[top].second = cnt;         pre[top] = pre[top - 1] + tmp;         precnt[top] = precnt[top - 1] + cnt;       }     }     for (int i = (1); i <= (top); i++) {       for (int j = (1); j <= (st[i].second); j++) {         printf( %.9f n , st[i].first);       }     }     return 0;   }   