#include <bits/stdc++.h>
using namespace std;
const int N = 300010, T = 60;
int i, j, k, l, m, n, o, p, c[N], pre[N], nex[N], L[200], R[200], tr, tl;
set<int> F;
set<int>::iterator pos;
double a[N], sum, tk[N], mi[N], ans;
inline bool cmp(int i, int j) { return a[i] > a[j]; }
void Init() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    c[i] = i;
    scanf("%lf", &a[i]);
  }
  sort(c + 1, c + n + 1, cmp);
  mi[0] = 1;
  for (i = 1; i <= T; i++) mi[i] = mi[i - 1] * 2.0;
}
void getr(int x) {
  pos = F.lower_bound(x);
  while (tr < T && pos != F.end()) {
    tr++;
    R[tr] = (*pos);
    pos++;
  }
  if (pos != F.end()) {
    pos++;
    R[tr + 1] = (*pos);
  } else
    R[tr + 1] = n + 1;
}
void getl(int x) {
  pos = F.lower_bound(x);
  if (pos != F.begin()) {
    pos--;
    while (tl < T) {
      tl++;
      L[tl] = (*pos);
      if (pos == F.begin()) break;
      pos--;
    }
  }
  sum = 0;
  int i;
  if (pos != F.begin()) {
    pos--;
    L[tl + 1] = (*pos);
  } else
    L[tl + 1] = 0;
  for (i = 0; i <= tl; i++) sum += (double)(L[i] - L[i + 1]) / mi[i];
}
inline double cul() {
  int i, j;
  double ans = 0;
  for (i = 0; i <= tr; i++) {
    ans += sum * (R[i + 1] - R[i]) / mi[i];
  }
  return ans;
}
void Prepare() {
  for (i = 1; i <= n; i++) pre[i] = nex[i] = -1;
  F.clear();
  F.insert(c[1]);
  ans = a[c[1]] * 0.5 * (double)(c[1]) * (double)(n - c[1] + 1);
  for (i = 2; i <= n; i++) {
    tl = tr = 0;
    L[0] = R[0] = c[i];
    getl(c[i]);
    getr(c[i]);
    ans += a[c[i]] * 0.5 * cul();
    F.insert(c[i]);
  }
  ans /= (double)(n) * (double)(n);
}
int main() {
  Init();
  Prepare();
  printf("%.8lf\n", ans);
  fclose(stdin);
  fclose(stdout);
  return 0;
}
