#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+7;
int a[N];
struct node{
    double x, y;
}p[N],s[N];
int n;
bool cmp(node a, node b)
{
    if(a.x == b.x) return a.y < b.y;
    return a.x < b.x;
}
bool Cross(node a, node b, node c)
{
    double x1 = a.x - b.x, y1 = a.y - b.y;
    double x2 = c.x - b.x, y2 = c.y - b.y;
    if((x1*y2-x2*y1) < 0) return 0;
    return 1;
}

int main()
{
    int n;
    scanf("%d",&n);
    for(int i = 1; i <= n; i++) {
        scanf("%d",&a[i]);
        p[i].x = i, p[i].y = 1.0*a[i];
    }
    if(n == 1) {
        printf("%.10f\n",p[1].y); return 0;
    }
    else if(n == 2) {
        printf("%.10f\n",p[1].y+p[2].y); return 0;
    }
    sort(p+1, p+n+1, cmp);
    int num = 0;
    for(int i = 1; i <= n; i++)
    {
        while(num >= 2 && !Cross(s[num], s[num-1],p[i]))
            num--;
        s[++num] = p[i];
    }
    s[0].x = 0, s[0].y = 0;
    double ans = 0.0;
    for(int i = 2; i <= num; i++)
        ans += 1.0*(s[i].y + s[i-1].y) * (s[i].x - s[i-1].x + 1) / 2.0 - s[i].y;
    ans += s[num].y;
    printf("%.10f\n",ans);
}