Submission #1307590

#TimeUsernameProblemLanguageResultExecution timeMemory
1307590ballbreaker비밀 (JOI14_secret)C++20
0 / 100
333 ms4468 KiB

#include "secret.h"
#include <bits/stdc++.h>
using namespace std;
int pref[8][1001];
int suff[8][1001];
int a[1001];
int f(int a, int b) {
    if (a == -1) {
        return b;
    }
    if (b == -1) {
        return a;
    }
    return Secret(a, b);
}
void build(int d, int tl, int tr) {
    if (tl > tr) {
        return;
    }
    int tm = (tl + tr) >> 1;
    pref[d][tm] = a[tm];
    for (int j = tm + 1; j <= tr; j++) {
        pref[d][j] = f(pref[d][j - 1], a[j]);
    }
    suff[d][tm] = -1;
    for (int j = tm - 1; j >= tl; j--) {
        suff[d][j] = f(a[j], suff[d][j + 1]);
    }
    build(d + 1, tl, tm - 1);
    build(d + 1, tm + 1, tr);
}
int nn = 0;
void Init(int N, int A[]) {
    for (int i = 0; i < N; i++) {
        a[i] = A[i];
    }
    nn = N;
    build(0, 0, N - 1);
}
int get(int d, int tl, int tr, int l, int r) {
    int tm = (tl + tr) >> 1;
    if (l <= tm && tm <= r) {
        return f(pref[d][tr], suff[d][tl]);
    } else if (r < tm) {
        return get(d + 1, tl, tm - 1, l, r);
    } else {
        return get(d + 1, tm + 1, tr, l, r);
    }
}
int Query(int l, int r) {
    return get(0, 0, nn - 1, l, r);
}
#Verdict Execution timeMemoryGrader output
Fetching results...