#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int main(){
int n;
int d1 = 0x3f3f3f3f,d2 = 0x3f3f3f3f;
scanf("%d",&n);
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
if(d1 > a[i]) {
d2 = d1;
d1 = a[i];
}
else if(d2 > a[i]) {
d2 = a[i];
}
}
int res = d1 / 2 + d2 / 2;
if(d1 % 2) res ++;
if(d2 % 2) res ++;
for(int i=2;i<n;i++) {
double A = a[i - 1];
double B = a[i];
double C = a[i + 1];
res = min(res,(int)min(ceil((A-1)/2)+ceil((C-1)/2) + 1,ceil(A/2)+ceil(C/2)));
res = min(res,(int)max({ceil(A / 2),ceil(B / 2),ceil((A+B)/3)}));
res = min(res,(int)max({ceil(C / 2),ceil(B / 2),ceil((C+B)/3)}));
}
res = min(res,(int)max({ceil((double)a[1] / 2),ceil((double)a[2] / 2),ceil((double)(a[1]+a[2])/3)}));
res = min(res,(int)max({ceil((double)a[n] / 2),ceil((double)a[n-1] / 2),ceil((double)(a[n]+a[n-1])/3)}));
printf("%d\n",res);
return 0;
}
/*
2
0 3
*/