Submission #1307590

#TimeUsernameProblemLanguageResultExecution timeMemory
1307590ballbreakerSecret (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...