제출 #602370

#제출 시각아이디문제언어결과실행 시간메모리
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...