#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 10;
const int S = 21;
int n, b[MAXN];
int lp[MAXN], rp[MAXN], x;
vector<pair<int, int> > q;
double ans = 0;
void init() {
  for (int i = 0; i <= n; i++) {
    lp[i + 1] = i;
    rp[i] = i + 1;
  }
  b[0] = MAXN;
  b[n + 1] = MAXN;
}
int findL(int i) {
  if (b[i] >= x) return i;
  lp[i] = findL(lp[i]);
  return lp[i];
}
int findR(int i) {
  if (b[i] > x) return i;
  rp[i] = findR(rp[i]);
  return rp[i];
}
double p2(int a) {
  double res = 1.;
  for (int i = 0; i < a; i++) res /= 2.;
  return res;
}
void proc(int i) {
  x = b[i];
  int ll = i, rr = i;
  vector<int> lg, rg;
  while (ll >= 1 && lg.size() < S) {
    lg.push_back(ll);
    ll = findL(lp[ll]);
  }
  while (rr <= n && rg.size() < S) {
    rg.push_back(rr);
    rr = findR(rp[rr]);
  }
  if (lg.size() < S) lg.push_back(ll);
  if (rg.size() < S) rg.push_back(rr);
  double cur = 0;
  for (int a = 0; a + 1 < lg.size(); a++) {
    for (int b = 0; b + 1 < rg.size(); b++) {
      cur += p2(a + b + 1) * (double)(rg[b + 1] - rg[b]) *
             (double)(lg[a] - lg[a + 1]);
    }
  }
  ans += cur * b[i];
}
int main() {
  scanf("%d", &n);
  init();
  for (int i = 1; i <= n; i++) {
    scanf("%d", b + i);
    q.push_back(make_pair(b[i], i));
  }
  sort(q.begin(), q.end());
  for (pair<int, int> qq : q) {
    proc(qq.second);
  }
  printf("%.8lf\n", ans / n / n);
  return 0;
}
