Submission #1268644

#TimeUsernameProblemLanguageResultExecution timeMemory
1268644kawhietSecret (JOI14_secret)C++20
100 / 100
343 ms8340 KiB
#include <bits/stdc++.h>
#include "secret.h"
using namespace std;

vector<vector<int>> dp;

void divconq(int l, int r) {
  if (l == r) {
    return;
  }
  int m = (l + r) / 2;
  for (int i = m - 2; i >= l; i--) {
    if (dp[i][m - 1] == -1) {
      dp[i][m - 1] = Secret(dp[i][i], dp[i + 1][m - 1]);
    }
  }
  for (int i = m + 1; i <= r; i++) {
    if (dp[m][i] == -1) {
      dp[m][i] = Secret(dp[m][i - 1], dp[i][i]);
    }
  }
  divconq(l, m);
  divconq(m + 1, r);
}

void Init(int N, int A[]) {
  dp.resize(N, vector<int>(N, -1));
  for (int i = 0; i < N; i++) {
    dp[i][i] = A[i];
  }
  divconq(0, N - 1);
}

int Query(int l, int r) {
  for (int i = l; i < r; i++) {
    if (dp[l][i] != -1 && dp[i + 1][r] != -1) {
      return Secret(dp[l][i], dp[i + 1][r]);
    }
  }
  return dp[l][r];
}
#Verdict Execution timeMemoryGrader output
Fetching results...