Submission #258712

#TimeUsernameProblemLanguageResultExecution timeMemory
258712fedoseevtimofeySecret (JOI14_secret)C++14
0 / 100
799 ms524292 KiB
#include <iostream> #include <string> #include <vector> #include <queue> #include <deque> #include <stack> #include <set> #include <map> #include <unordered_map> #include <unordered_set> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> #include <random> #include <iomanip> #include <functional> #include <cassert> using namespace std; typedef long long ll; #include "secret.h" const int N = 1007; int val[N][N]; int n; void Init(int nn, int A[]) { n = nn; function <void(int, int)> rec = [&] (int l, int r) { if (l > r) return; int m = (l + r) >> 1; rec(l, m - 1); rec(m + 1, r); val[m][m] = A[m]; for (int i = m - 1; i >= l; --i) { val[m][i] = Secret(A[i], val[m][i + 1]); } if (m < r) { val[m][m + 1] = A[m + 1]; for (int i = m + 2; i <= r; ++i) { val[m][i] = Secret(val[m][i - 1], A[i]); } } }; rec(0, n - 1); } int Query(int ql, int qr) { function <int(int, int)> rec = [&] (int l, int r) { int m = (l + r) >> 1; if (ql <= m && m <= qr) { int vl = val[m][ql]; if (qr != m) { vl = Secret(vl, val[m][qr]); } return vl; } else { if (r < m) { return rec(l, m - 1); } else { return rec(m + 1, r); } } }; return rec(0, n - 1); }
#Verdict Execution timeMemoryGrader output
Fetching results...