이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(System.out);
int N = Integer.parseInt(br.readLine());
int [] Arr = new int[N];
StringTokenizer st;
st = new StringTokenizer(br.readLine());
for (int i=0;i<N;i++) {
Arr[i] = Integer.parseInt(st.nextToken());
}
long [] PVals = new long[N];
long [] PAdd = new long [N];
PVals[0] = Arr[0];
PAdd[0] = 0;
for (int i=1;i<N;i++) {
PVals[i] = Arr[i]+PAdd[i-1];
PAdd[i] = PAdd[i-1];
if (PVals[i]<=PVals[i-1]) {
PAdd[i]+=PVals[i-1]-PVals[i]+1;
PVals[i] = PVals[i-1]+1;
}
}
long [] SVals = new long[N];
long [] SAdd = new long [N];
SVals[N-1] = Arr[N-1];
SAdd[N-1] = 0;
for (int i=N-2;i>=0;i--) {
SVals[i] = Arr[i]+SAdd[i+1];
SAdd[i] = SAdd[i+1];
if (SVals[i]<=SVals[i+1]) {
SAdd[i] = SVals[i+1]-SVals[i]+1;
SVals[i] = SVals[i+1]+1;
}
}
long ans = Long.MAX_VALUE;
for (int i=0;i<N;i++) {
ans = Math.min(ans, Math.max(SAdd[i], PAdd[i]));
}
pw.println(ans);
pw.close();
br.close();
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |