Submission #922560

#TimeUsernameProblemLanguageResultExecution timeMemory
922560hqminhuwuSecret (JOI14_secret)C++14
100 / 100
364 ms13968 KiB
#include "secret.h" #define forr(_a,_b,_c) for(int _a = (_b); _a <= (_c); ++_a) #define ford(_a,_b,_c) for(int _a = (_b) + 1; _a --> (_c);) #define forf(_a,_b,_c) for(int _a = (_b); _a < (_c); ++_a) #define st first #define nd second #define ll long long using namespace std; const int N = 2e3 + 5; const ll oo = 1e9; const ll mod = 1e9 + 7; int n, f[N][N]; void calc (int l, int r, int a[]){ int mid = (l + r) / 2; f[mid][mid] = a[mid]; f[mid + 1][mid + 1] = a[mid + 1]; forr (i, mid + 2, r) f[mid + 1][i] = Secret(f[mid + 1][i - 1], a[i]); ford (i, mid - 1, l) f[mid][i] = Secret(a[i], f[mid][i + 1]); if (l < mid) calc (l, mid, a); if (mid + 1 < r) calc (mid + 1, r, a); } void Init (int u, int a[]){ n = u; calc (0, n - 1, a); } int Query (int u, int v){ int l = 0, r = n - 1; while (l != r){ int mid = (l + r) / 2; if (mid >= u && mid < v) return Secret(f[mid][u], f[mid + 1][v]); if (mid == v) return f[mid][u]; if (mid < u) l = mid + 1; else r = mid; } return f[l][l]; } /* */
#Verdict Execution timeMemoryGrader output
Fetching results...