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]);
    }
}