//package ojuz;
import java.io.*;
import java.util.*;
public class hac {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        int moves = (n + 1) / 2;
        int[] arr = new int[n + moves - 1];
        String[] read = reader.readLine().split(" ");
        for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(read[i]);
        for (int i = n; i < arr.length; i++) arr[i] = arr[i - n];
        int val = 0;
        for (int i = 0; i < moves; i++) val += arr[i];
        int[] pref = new int[n + moves - 1];
        for (int i = 0; i < n - 1; i++) {
            pref[i] = val;
            val -= arr[i];
            val += arr[i + moves];
        }
        pref[n - 1] = val;
        for (int i = n; i < pref.length; i++) pref[i] = pref[i - n];
        Deque<Integer> deque = new ArrayDeque<>();
        for (int i = 0; i < moves; i++) {
            while (!deque.isEmpty() && pref[deque.getLast()] >= pref[i]) deque.pollLast();
            deque.addLast(i);
        }
        int best = pref[deque.getFirst()];
        for (int i = moves; i < pref.length; i++) {
            while (!deque.isEmpty() && pref[deque.getLast()] >= pref[i]) deque.pollLast();
            deque.addLast(i);
            if (deque.getFirst() < (i - moves + 1)) deque.pollFirst();
            best = Math.max(best, pref[deque.getFirst()]);
        }
        System.out.println(best);
    }
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |