#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9;
int n, m, ans;
int a[300005], l[300005], r[300005], fuck[300005], pre[300005];
double p;
bool flag;
struct fuck {
  int id, val;
  bool operator<(const fuck &ls) const {
    return val > ls.val || (val == ls.val && id < ls.id);
  }
} v[300005];
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return x * f;
}
inline void print(int x) {
  if (x >= 10) print(x / 10);
  putchar(x % 10 + '0');
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) v[i].val = a[i] = read(), v[i].id = i;
  sort(v + 1, v + n + 1);
  a[0] = a[n + 1] = inf;
  l[1] = 0;
  for (int i = 2; i <= n; i++) {
    if (a[i] <= a[i - 1])
      l[i] = i - 1;
    else {
      int x = l[i - 1];
      for (; a[x] < a[i]; x = l[x])
        ;
      l[i] = x;
    }
  }
  r[n] = n + 1;
  for (int i = n - 1; i; i--) {
    if (a[i] < a[i + 1])
      r[i] = i + 1;
    else {
      int x = r[i + 1];
      for (; a[x] <= a[i]; x = r[x])
        ;
      r[i] = x;
    }
  }
  for (int i = 1; i <= n; i++) fuck[i] = n + 1, pre[i] = 0;
  for (int i = 1; i <= n; i++) {
    int x = v[i].id, cnt = 0;
    double tmp1 = 0, tmp2 = 0, fuckls = 1;
    if (r[x] != n + 1) pre[r[x]] = x;
    if (l[x] != 0) fuck[l[x]] = x;
    pre[x] = l[x], fuck[x] = r[x];
    while (1) {
      tmp1 += fuckls * (x - pre[x]), fuckls /= 2, x = pre[x];
      if (!x || ++cnt >= 40) break;
    }
    x = v[i].id, cnt = 0, fuckls = 1;
    while (1) {
      tmp2 += fuckls * (fuck[x] - x), fuckls /= 2, x = fuck[x];
      if (x == n + 1 || ++cnt >= 40) break;
    }
    p += tmp1 * tmp2 * a[v[i].id] / 2;
  }
  printf("%.8lf\n", p / n / n);
  return 0;
}
