import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
solution1(in);
// solution2(in);
}
}
/**
* 模拟法: 数学公式倒推
* 三种情形 可合为一
*/
private static void solution1(Scanner in){
int N = in.nextInt();
int[] H = new int[N+1];
int[] E = new int[N+1];
for(int i=1; i<=N; i++){
H[i] = in.nextInt();
}
for(int i=N; i>0; i--){
// E[i]<H[i] => E[i-1]<H[i], E[i-1]-(H[i]-E[i-1])=E[i] => E[i-1] = Math.ceil((E[i]+H[i])/2)
// E[i]>H[i] => E[i-1]>H[i], E[i-1]+(E[i-1]-H[i])=E[i] => E[i-1] = Math.ceil((E[i]+H[i])/2)
// E[i]=H[i] => E[i-1]=H[i], E[i-1]=E[i] => 2E[i-1]=E[i]+H[i] => E[i-1] = Math.ceil((E[i]+H[i])/2)
E[i-1] = (int) Math.ceil((E[i]+H[i])/2.0);
}
System.out.println(E[0]);
}
/**
* 模拟法: 数学公式倒推
*/
private static void solution2(Scanner in){
int N = in.nextInt();
int[] H = new int[N+1];
int[] E = new int[N+1];
for(int i=1; i<=N; i++){
H[i] = in.nextInt();
}
// E[N-1] = (int) Math.ceil(H[N]/2.0) -> 可合并
for(int i=N; i>0; i--){
// E[i]<H[i] => E[i-1]<H[i], E[i-1]-(H[i]-E[i-1])=E[i] => E[i-1] = Math.ceil((E[i]+H[i])/2)
if(E[i] < H[i]){
E[i-1] = (int) Math.ceil((E[i]+H[i])/2.0);
}
// E[i]>H[i] => E[i-1]>H[i], E[i-1]+(E[i-1]-H[i])=E[i] => E[i-1] = Math.ceil((E[i]+H[i])/2)
else if(E[i] > H[i]){
E[i-1] = (int) Math.ceil((E[i]+H[i])/2.0);
}else{
E[i-1] = H[i];
}
}
System.out.println(E[0]);
}
}