이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
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 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... |