#include <algorithm>
#include <climits>
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int temp = n;
vector<int> ret(n);
for (auto& num : ret) {
cin >> num;
}
int minNum = ret[0] > ret[1] / 2 ? ret[0] : (ret[1] + 1) / 2;
int t1, t2;
for (int i = 0; i < n - 2; i++) {
if (ret[i + 1] > ret[i + 2] / 2) {
t2 = (ret[i + 2] + 1) / 2;
t1 = (ret[i + 1] - t2 + 1) / 2;
minNum = min(t1 + t2, minNum);
} else {
t2 = (ret[i + 2] + 1) / 2;
minNum = min(t2, minNum);
}
}
int first = ret[0];
sort(ret.begin(), ret.end());
if (ret[0] != first && ret[1] != first) {
minNum = min((ret[0] + 1) / 2 + (ret[1] + 1) / 2, minNum);
} else if (ret[0] == first) {
minNum = min(min(first + (ret[1] + 1) / 2, (ret[1] + 1) / 2 + (ret[2] + 1) / 2),
minNum);
} else if (ret[1] == first) {
minNum = min(min(first + (ret[0] + 1) / 2, (ret[0] + 1) / 2 + (ret[2] + 1) / 2),
minNum);
}
cout << minNum << endl;
}