Submission #1196950

#TimeUsernameProblemLanguageResultExecution timeMemory
1196950og_matveychick1Secret (JOI14_secret)C++20
0 / 100
339 ms8284 KiB
#include "secret.h"

const int N = 1e3;

int n, a[N], b[N][N];

void go(int l, int r) {
    if (l + 1 == r) return;
    int m = (l + r) / 2;
    b[m][m] = a[m];
    b[m - 1][m - 1] = a[m - 1];
    for (int i = m - 2; i >= l; i--) b[i][m - 1] = Secret(a[i], b[i + 1][m - 1]);
    for (int i = m + 1; i < r; i++) b[m][i] = Secret(a[i], b[m][i - 1]);
    go(l, m), go(m, r);
}

void Init(int _n, int A[]) {
    n = _n;
    for (int i = 0; i < n; i++) a[i] = A[i];
    go(0, N);
}

int get(int l, int r, int L, int R) {
    int m = (l + r) / 2;
    if (m == L || m == R) return b[L][R - 1];
    if (m <= L) return get(m, r, L, R);
    else if (m >= R) return get(l, m, L, R);
    return Secret(b[L][m - 1], b[m][R - 1]);
}

int Query(int L, int R) {
    return get(0, N, L, R + 1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...