func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e6 + 6;   const int T = (1 << 21) + 123;   long long a[T], b[T], s[T];   int p[N];   int n, m, d;   int i, j, k, l;   void upd(int i, int j, long long A, long long B, int l = 0, int r = d - 1,            int q = 1) {     if (!(i <= j && l <= r && l <= i && j <= r)) return;     if (i == l && j == r) {       a[q] += A;       b[q] += B;       s[q] += (A + A + B * (j - i)) * (j - i + 1LL) / 2;     } else {       int m = (l + r) >> 1;       if (i <= m) upd(i, ((j) < (m) ? (j) : (m)), A, B, l, m, q * 2);       if (j > m)         upd(((i) > (m + 1) ? (i) : (m + 1)), j,             (i > m) ? A : (A + B * (m - i + 1LL)), B, m + 1, r, q * 2 + 1);       s[q] = s[q * 2] + s[q * 2 + 1] +              (a[q] + a[q] + b[q] * (r - l)) * (r - l + 1LL) / 2;     }   }   long long sum(int i, int j, int l = 0, int r = d - 1, int q = 1) {     if (!(i <= j && l <= r && l <= i && j <= r)) return 0;     if (i == l && j == r) {       return s[q];     } else {       int m = (l + r) >> 1;       a[q * 2] += a[q];       b[q * 2] += b[q];       s[q * 2] += (a[q] + a[q] + b[q] * (m - l)) * (m - l + 1) / 2;       a[q * 2 + 1] += a[q] + b[q] * (m - l + 1LL);       b[q * 2 + 1] += b[q];       s[q * 2 + 1] +=           (a[q] + b[q] * (m - l + 1LL) + a[q] + b[q] * (r - l)) * (r - m) / 2;       a[q] = b[q] = 0;       long long s1 = 0;       if (i <= m) s1 = sum(i, ((j) < (m) ? (j) : (m)), l, m, q * 2);       long long s2 = 0;       if (j > m)         s2 = sum(((i) > (m + 1) ? (i) : (m + 1)), j, m + 1, r, q * 2 + 1);       return s1 + s2;     }   }   int z[T];   void upd2(int i) {     for (i += d; i; i >>= 1) ++z[i];   }   int sum2(int i, int j) {     int res = 0;     for (i += d, j += d; i <= j; i >>= 1, j >>= 1) {       if (i & 1) {         res += z[i];         ++i;       }       if (j + 1 & 1) {         res += z[j];         --j;       }     }     return res;   }   pair<int, int> qq[N];   int _n;   int main() {     scanf( %d , &n);     _n = n;     for (i = 1; i <= n; ++i) {       scanf( %d , &p[i]);       qq[i - 1] = make_pair(p[i], i);     }     sort(qq, qq + n);     n += 2;     for (d = 1; d < n; d <<= 1)       ;     upd2(0);     for (i = n - 1; i < d; ++i) {       upd2(i);     }     for (int it = 0; it < n - 2; ++it) {       k = qq[it].first;       i = qq[it].second;       int sl, sr, il, ir;       sl = sum2(0, i - 1);       for (il = 1; il < d;)         if (z[il * 2] >= sl)           il = il * 2;         else {           sl -= z[il * 2];           il = il * 2 + 1;         }       sr = sum2(i + 1, d - 1);       for (ir = 1; ir < d;)         if (z[ir * 2 + 1] >= sr)           ir = ir * 2 + 1;         else {           sr -= z[ir * 2 + 1];           ir = ir * 2;         }       il -= d;       ir -= d;       int m1 = ((((i - il) > 0 ? (i - il) : -(i - il))) >                         (((i - ir) > 0 ? (i - ir) : -(i - ir)))                     ? (((i - il) > 0 ? (i - il) : -(i - il)))                     : (((i - ir) > 0 ? (i - ir) : -(i - ir))));       int m2 = ((((i - il) > 0 ? (i - il) : -(i - il))) <                         (((i - ir) > 0 ? (i - ir) : -(i - ir)))                     ? (((i - il) > 0 ? (i - il) : -(i - il)))                     : (((i - ir) > 0 ? (i - ir) : -(i - ir))));       int mn = ir - il - 1;       upd(m1 + 1, mn, 1LL * (mn - m1) * k, -k);       upd(m2, m1, 1LL * k * m2, 0);       upd(1, m2 - 1, k, k);       upd2(i);     }     scanf( %d , &m);     while (m--) {       scanf( %d , &k);       printf( %.9lf n , sum(k, k) / (_n - k + 1.));     }     return 0;   }   