#include <bits/stdc++.h>
using namespace std;
#include "secret.h"
const int maxn = 1000 + 10;
int a[maxn], dp[maxn][maxn];
bool kir[maxn][maxn];
void goh(int l, int r) {
if (l >= r)
return;
int m = (l + r) / 2;
goh(l, m);
goh(m + 1, r);
for (int i = m - 1; i >= l; i--) {
dp[i][m] = Secret(a[i], dp[i + 1][m]);
kir[i][m] = true;
}
for (int i = m + 2; i <= r; i++) {
dp[m + 1][i] = Secret(a[i], dp[m + 1][i - 1]);
kir[m + 1][i] = true;
}
}
void Init(int N, int A[]) {
for (int i = 0; i < N; i++) {
dp[i][i] = A[i];
a[i] = A[i];
kir[i][i] = true;
}
goh(0, N - 1);
}
int Query(int L, int R) {
int l = L, r = R;
if (kir[l][r])
return dp[l][r];
for (int m = l; m < r; m++) {
if (kir[l][m] && kir[m + 1][r]) {
return Secret(dp[l][m], dp[m + 1][r]);
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |