#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll INF=(ll)4e18;
int main(){ios::sync_with_stdio(0);cin.tie(0);
int N; if(!(cin>>N)) return 0;
vector<ll>T(N),c(N,INF); priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<>>q;
for(int i=0;i<N;i++){cin>>T[i]; c[i]=T[i]; q.push({c[i],i});}
while(!q.empty()){
auto [t,u]=q.top(); q.pop(); if(t!=c[u]) continue;
for(int d:{-1,1}){
int v=u+d; if(v<0||v>=N) continue;
ll x=t+T[v]/2; if(x<c[v]){c[v]=x; q.push({x,v});}
int other = v + (d==1?1:-1); // <- 여기서 '다른 쪽 이웃'을 정확히 계산
if(other>=0 && other<N && c[other]<INF){
x = max(t,c[other]) + T[v]/4;
if(x<c[v]){c[v]=x; q.push({x,v});}
}
}
}
cout<<*max_element(c.begin(),c.end())<<"\n";
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbGw9bG9uZyBsb25nOwpjb25zdCBsbCBJTkY9KGxsKTRlMTg7CmludCBtYWluKCl7aW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTsKIGludCBOOyBpZighKGNpbj4+TikpIHJldHVybiAwOwogdmVjdG9yPGxsPlQoTiksYyhOLElORik7IHByaW9yaXR5X3F1ZXVlPHBhaXI8bGwsaW50Pix2ZWN0b3I8cGFpcjxsbCxpbnQ+PixncmVhdGVyPD4+cTsKIGZvcihpbnQgaT0wO2k8TjtpKyspe2Npbj4+VFtpXTsgY1tpXT1UW2ldOyBxLnB1c2goe2NbaV0saX0pO30KIHdoaWxlKCFxLmVtcHR5KCkpewogIGF1dG8gW3QsdV09cS50b3AoKTsgcS5wb3AoKTsgaWYodCE9Y1t1XSkgY29udGludWU7CiAgZm9yKGludCBkOnstMSwxfSl7CiAgICBpbnQgdj11K2Q7IGlmKHY8MHx8dj49TikgY29udGludWU7CiAgICBsbCB4PXQrVFt2XS8yOyBpZih4PGNbdl0pe2Nbdl09eDsgcS5wdXNoKHt4LHZ9KTt9CiAgICBpbnQgb3RoZXIgPSB2ICsgKGQ9PTE/MTotMSk7IC8vIDwtIOyXrOq4sOyEnCAn64uk66W4IOyqvSDsnbTsm4Mn7J2EIOygle2Zle2eiCDqs4TsgrAKICAgIGlmKG90aGVyPj0wICYmIG90aGVyPE4gJiYgY1tvdGhlcl08SU5GKXsKICAgICAgeCA9IG1heCh0LGNbb3RoZXJdKSArIFRbdl0vNDsKICAgICAgaWYoeDxjW3ZdKXtjW3ZdPXg7IHEucHVzaCh7eCx2fSk7fQogICAgfQogIH0KIH0KIGNvdXQ8PCptYXhfZWxlbWVudChjLmJlZ2luKCksYy5lbmQoKSk8PCJcbiI7Cn0=