Submission #1153566

#TimeUsernameProblemLanguageResultExecution timeMemory
1153566PekibanSecret (JOI14_secret)C++20
100 / 100
339 ms4476 KiB
#include "secret.h"
#include <bits/stdc++.h>

using namespace std;

const int N = 1001, LOG = 10;
int P[LOG][N], S[LOG][N], a[N], n;

void build(int l, int r, int i = 0) {
    if (l == r) return;
    int m = (l + r)/2;
    S[i][m] = a[m], P[i][m+1] = a[m+1];
    for (int j = m-1; j >= l; --j)  S[i][j] = Secret(a[j], S[i][j+1]);
    for (int j = m+2; j <= r; ++j)  P[i][j] = Secret(P[i][j-1], a[j]);
    build(l, m, i+1);
    build(m+1, r, i+1);
}
void Init(int NN, int A[]) {
    n = NN;
    for (int i = 1; i <= n; ++i)    a[i] = A[i-1];
    build(1, n);
}
int Query(int L, int R) {
    L++, R++;
    if (L == R) return a[L];
    int l = 1, r = n, i = 0;
    while (1) {
        int m = (l + r)/2;
        if (L <= m && m+1 <= R) break;
        else if (R <= m)
            r = m;
        else
            l = m+1;
        ++i;
    }
    return Secret(S[i][L], P[i][R]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...