Submission #954530

#TimeUsernameProblemLanguageResultExecution timeMemory
954530IBorySecret (JOI14_secret)C++17
0 / 100
378 ms4772 KiB
#include "secret.h" #include <bits/stdc++.h> #define pii pair<int, int> using namespace std; const int MAX = 1004; map<pii, int> D; int N, S[MAX]; void DnC1(int L, int R) { if (L >= R) return; int mid = (L + R) >> 1; int pv = -1; for (int i = mid - 1; i >= L; --i) { int n = -1; if (pv == -1) n = Secret(S[i], S[mid]); else n = Secret(S[i], pv); pv = D[{i, mid}] = n; } pv = -1; for (int i = mid + 2; i <= R; ++i) { int n = -1; if (pv == -1) n = Secret(S[mid + 1], S[i]); else n = Secret(pv, S[i]); pv = D[{mid + 1, i}] = n; } DnC1(L, mid); DnC1(mid + 1, R); } void Init(int _N, int A[]) { N = _N; for (int i = 0; i < N; ++i) S[i] = A[i]; DnC1(0, N - 1); for (int i = 0; i < N; ++i) D[{i, i}] = A[i]; } int DnC2(int L, int R, int s, int e) { if (L >= R) return -1; int mid = (L + R) >> 1; if (s <= mid && mid < e) { int a = D[{s, mid}], b = D[{mid + 1, e}]; return Secret(a, b); } if (e <= mid) return DnC2(L, mid, s, e); else return DnC2(mid + 1, R, s, e); } int Query(int L, int R) { return DnC2(0, N - 1, L, R); }
#Verdict Execution timeMemoryGrader output
Fetching results...