Submission #1161648

#TimeUsernameProblemLanguageResultExecution timeMemory
1161648nhphucSecret (JOI14_secret)C++20
0 / 100
334 ms4512 KiB
#include "secret.h"
#include <bits/stdc++.h>

using namespace std;

int n, a[1007], pre[15][1007], suf[15][1007];

void build (int id, int l, int r){
    if (l == r){
        return;
    }
    int m = l + r >> 1;
    pre[id][m] = a[m];
    suf[id][m + 1] = a[m + 1];
    for (int i = m - 1; i >= l; --i){
        pre[id][i] = Secret(pre[id][i + 1], a[i]);
    }
    for (int i = m + 2; i <= r; ++i){
        suf[id][i] = Secret(suf[id][i - 1], a[i]);
    }
    build(id + 1, l, m);
    build(id + 1, m + 1, r);
    return;
}

void Init (int N, int A[]){
    n = N;
    for (int i = 1; i <= n; ++i){
        a[i] = A[i - 1];
    }
    build(1, 1, n);
    return;
}

int Query (int L, int R){
    int l = 1, r = n, id = 0; 
    ++L; ++R;
    if (L == R){
        return a[L];
    }
    while (true){
        ++id;
        int m = l + r >> 1;
        if (L <= m && m < R){
            break;
        }
        if (m >= R){
            r = m;
        } else {
            l = m + 1;
        }
    }
    return Secret(pre[id][L], suf[id][R]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...