Submission #1301947

#TimeUsernameProblemLanguageResultExecution timeMemory
1301947newsboySecret (JOI14_secret)C++20
100 / 100
338 ms8264 KiB
#include "secret.h"

constexpr int V = 1E3;
int f[V][V], n;

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

void Init(int N, int A[]) {
    n = N;
    Divide(0, n, A);
}

int Query(int L, int R) {
    int a = 0, b = n;
    while (b - a > 1) {
        int m = (a + b) / 2;
        if (L < m && m <= R) {
            return Secret(f[m][L], f[m][R]);
        }
        if (L >= m) {
            a = m;
        }
        else {
            b = m;
        }
    }
    return f[a][a];
}
#Verdict Execution timeMemoryGrader output
Fetching results...