제출 #1282114

#제출 시각아이디문제언어결과실행 시간메모리
1282114baotoan655비밀 (JOI14_secret)C++20
100 / 100
342 ms4444 KiB
#include <bits/stdc++.h> #include "secret.h" #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); } using namespace std; const int N = 1001; int n; int a[N]; int f[10][N]; void build(int l, int r, int k) { if (l >= r) return; int mid = (l + r) / 2; int crr = a[mid]; for (int i = mid; i >= l; i--) { f[k][i] = crr; if (i > l) crr = Secret(a[i - 1], crr); } crr = a[mid + 1]; for (int i = mid + 1; i <= r; i++) { f[k][i] = crr; if (i < r) crr = Secret(crr, a[i + 1]); } build(l, mid, k + 1); build(mid + 1, r, k + 1); } void Init(int _n, int A[]) { n = _n; for (int i = 0; i < n; i++) a[i] = A[i]; build(0, n - 1, 0); } int Query(int l, int r) { int L = 0, R = n - 1, k = 0; while (1) { int mid = (L + R) / 2; if (l >= L && r <= R) { if (r == mid) return f[k][l]; if (l == mid + 1) return f[k][r]; if (l <= mid && r > mid) return Secret(f[k][l], f[k][r]); } if (r <= mid) R = mid; else L = mid + 1; k++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...