Submission #366644

#TimeUsernameProblemLanguageResultExecution timeMemory
366644idk321Secret (JOI14_secret)C++11
0 / 100
624 ms43692 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #include "secret.h" const int N = 1000; int* ar; vector<int> need[N][N]; void cost(int a, int b) { if (a == b) { need[a][b].push_back(ar[a]); return; } else if (a == b - 1) { need[a][a].push_back(ar[a]); need[b][b].push_back(ar[b]); need[a][b].push_back(ar[a]); need[a][b].push_back(ar[b]); return; } else if (b - a < 0) return; int mid = (a + b) / 2; int cur = ar[mid]; need[mid][mid].push_back(cur); for (int i = mid - 1; i >= a; i--) { cur = Secret(cur, ar[i]); need[i][mid].push_back(cur); } cur = ar[mid + 1]; need[mid + 1][mid + 1].push_back(cur); for (int i = mid + 2; i <= b; i++) { cur = Secret(cur, ar[i]); need[mid + 1][i].push_back(cur); } for (int i = mid; i >= a; i--) { for (int j = mid + 1; j <= b; j++) { need[i][j].push_back(need[i][mid][0]); need[i][j].push_back(need[mid + 1][j][0]); } } cost(a, mid - 1); cost(mid + 2, b); } /* int main() { } */ void Init(int n, int A[]) { ar = A; cost(0, n - 1); } int Query(int l, int r) { if (need[l][r].size() == 1) return need[l][r][0]; int cur = Secret(need[l][r][0], need[l][r][1]); return cur; }
#Verdict Execution timeMemoryGrader output
Fetching results...