답안 #303231

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
303231 2020-09-20T03:24:27 Z llaki 식물 비교 (IOI20_plants) Java 11
5 / 100
498 ms 28908 KB
import java.util.Arrays;

public class plants {
    int n;
    int[] nxt;
    int[] r;

    void init(int k, int[] r) {
        n = r.length;
        nxt = new int[n];
        this.r = r;
        // r[i] = (a[i] > a[(i + 1)%n] ? 1 : 0)
        // x -> find smallest z on circle clockwise s.t. r[z] != r[x].
        // If y is between x and z (clockwise), than ans(x,y) = r[x].

        // r[x] = r[x+1] = ... = r[s] = 1 => a[x] > a[x+1] > a[x+2] > ... > a[s + 1]
        // r[x] = r[x+1] = ... = r[s] = -1 => a[x] < a[x+1] < a[x+2] > ... < a[s + 1]
        // nxt[x] = smallest y s.t. nxt[y] != nxt[x]. for query z s.t. x < z <= nxt[x] + 1, comp(x,z) known.
        for (int i = 0; i < n; i++) {
            int j = i;
            boolean jump = false;
            while (r[(j + 1) % n] == r[i]) {
                j = (j + 1) % n;
                if (j == 0) jump = true;
            }
            // r[i] = r[i+1] = ... = r[j] != r[j + 1].
            if (i <= j) {
                for (int x = i; x <= j; x++) {
                    nxt[x] = (j + 1) % n;
                }
            } else {
                for (int x = i; x <= n - 1; x++) {
                    nxt[x] = (j + 1) % n;
                }
                for (int x = 0; x <= j; x++) {
                    nxt[x] = (j + 1) % n;
                }
            }
            if (jump) break;
            i = j;
        }
        //System.out.println(Arrays.toString(nxt));
    }

    boolean between(int l, int r, int x) {
        if (l <= r) {
            return l <= x && x <= r;
        }
        return (l <= x && x <= n - 1) || (0 <= x && x <= r);
    }

    int compare_plants(int x, int y) {
        // r[x] > r[x+1] > ... > r[j].
        if (between(x, nxt[x], y)) {
            return r[x] > 0 ? -1 : +1;
        }
        if (between(y, nxt[y], x)) {
            return r[y] > 0 ? +1 : -1;
        }
        return 0;
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 10352 KB Output is correct
2 Correct 75 ms 10104 KB Output is correct
3 Correct 78 ms 10224 KB Output is correct
4 Correct 78 ms 10228 KB Output is correct
5 Correct 86 ms 10180 KB Output is correct
6 Correct 355 ms 26696 KB Output is correct
7 Correct 345 ms 26924 KB Output is correct
8 Correct 362 ms 27652 KB Output is correct
9 Correct 423 ms 28908 KB Output is correct
10 Correct 498 ms 28184 KB Output is correct
11 Correct 415 ms 26356 KB Output is correct
12 Correct 380 ms 26540 KB Output is correct
13 Correct 318 ms 28028 KB Output is correct
14 Correct 420 ms 28636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 84 ms 10328 KB Output is correct
2 Correct 78 ms 10100 KB Output is correct
3 Incorrect 79 ms 10216 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 84 ms 10328 KB Output is correct
2 Correct 78 ms 10100 KB Output is correct
3 Incorrect 79 ms 10216 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 79 ms 10220 KB Output is correct
2 Incorrect 82 ms 10340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 77 ms 10236 KB Output is correct
2 Correct 79 ms 10240 KB Output is correct
3 Correct 83 ms 10456 KB Output is correct
4 Incorrect 82 ms 10104 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 79 ms 10228 KB Output is correct
2 Correct 77 ms 10232 KB Output is correct
3 Correct 76 ms 10108 KB Output is correct
4 Incorrect 77 ms 10360 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 78 ms 10352 KB Output is correct
2 Correct 75 ms 10104 KB Output is correct
3 Correct 78 ms 10224 KB Output is correct
4 Correct 78 ms 10228 KB Output is correct
5 Correct 86 ms 10180 KB Output is correct
6 Correct 355 ms 26696 KB Output is correct
7 Correct 345 ms 26924 KB Output is correct
8 Correct 362 ms 27652 KB Output is correct
9 Correct 423 ms 28908 KB Output is correct
10 Correct 498 ms 28184 KB Output is correct
11 Correct 415 ms 26356 KB Output is correct
12 Correct 380 ms 26540 KB Output is correct
13 Correct 318 ms 28028 KB Output is correct
14 Correct 420 ms 28636 KB Output is correct
15 Correct 84 ms 10328 KB Output is correct
16 Correct 78 ms 10100 KB Output is correct
17 Incorrect 79 ms 10216 KB Output isn't correct
18 Halted 0 ms 0 KB -