Submission #602370

#TimeUsernameProblemLanguageResultExecution timeMemory
602370ziduoHacker (BOI15_hac)Java
100 / 100
365 ms31612 KiB
import java.io.*;
import java.util.*;
 
class hac {
 
	public static void main(String[] args) throws IOException {
 
		hac obj = new hac();
 
		obj.doStuff();
 
	}
	
	// first # is val, second is pos
	void add(ArrayDeque<int[]> q, int[] n) {
		while (!q.isEmpty() && q.peekFirst()[0] >= n[0]) {
			q.pollFirst();
		}
		q.addFirst(n);
	}
 
	int[] nums;
	int[] sums;
	private void doStuff() throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		nums = new int[Integer.parseInt(br.readLine())];
		sums = new int[nums.length];
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < nums.length; i++) {
			nums[i] = Integer.parseInt(st.nextToken());
		}
		br.close();
		
		int cap = nums.length/2;
		if (nums.length%2==1) cap++;
		int rsum = 0;
		for (int i = 0; i < cap; i++) {
			rsum += nums[i];
		}
		for (int i = 0; i < nums.length; i++) {
			sums[i] = rsum;
			rsum -= nums[i];
			rsum += nums[(i+cap)%nums.length];
		}
		
		ArrayDeque<int[]> q = new ArrayDeque<>();
		int max = 0;
		for (int i = 0; i < cap; i++) {
			add(q, new int[] {sums[i], i});
		}
		for (int i = 0; i < nums.length; i++) {
			max = Math.max(max, q.peekLast()[0]);
			//System.out.println(q.peekLast()[0]);
			if (q.peekLast()[1] == i) q.pollLast();
			add(q, new int[] {sums[(i+cap)%nums.length], (i+cap)});
		}
		
		System.out.println(max);
 
	}
 
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...