Submission #768155

#TimeUsernameProblemLanguageResultExecution timeMemory
768155raysh07Secret (JOI14_secret)C++17
0 / 100
388 ms16536 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; int n; const int maxn = 1001; int seg[4 * maxn]; int a[maxn]; int ans[maxn][maxn]; void dnc(int l, int r){ if (r <= l) return; int m = (l + r)/2; if (l != m) ans[m - 1][m] = Secret(a[m - 1], a[m]); for (int i = m - 2; i >= l; i--) ans[i][m] = Secret(a[i], ans[i + 1][m]); if (r != (m + 1)) ans[m + 1][m + 2] = Secret(a[m + 1], a[m + 2]); for (int i = m + 3; i <= r; i++) ans[m + 1][i] = Secret(ans[m + 1][i - 1], a[i]); dnc(l, m); dnc(m + 1, r); } void Init(int N, int A[]) { n = N; for (int i = 1; i <= n; i++) a[i] = A[i - 1]; for (int i = 0; i < maxn; i++){ for (int j = 0; j < maxn; j++){ ans[i][j] = -1; if (i == j) ans[i][i] = a[i]; } } dnc(1, n); } int Query(int l, int r) { l++; r++; if (l == r) return a[l]; if (ans[l][r] != -1) return ans[l][r]; for (int i = l + 1; i < r; i++){ if (ans[l][i] != -1 && ans[i + 1][r] != -1) { // cout << l << " " << i << " " << i + 1 << " " << r << "\n"; // cout << ans[l][i] << " " << ans[i + 1][r] << "\n"; return Secret(ans[l][i], ans[i + 1][r]); } } assert(false); }
#Verdict Execution timeMemoryGrader output
Fetching results...