Submission #1292445

#TimeUsernameProblemLanguageResultExecution timeMemory
1292445basaSecret (JOI14_secret)C++20
100 / 100
360 ms12240 KiB
#include "bits/stdc++.h"
#include "secret.h"

using namespace std;
const int maxn = 1e3 + 5;
int n, a[maxn];
int prel[maxn][maxn], prer[maxn][maxn];
void cmp(int l, int r){
  if(l == r) return;
  int mid = (l + r) / 2;
  for(int i = mid; i >= l; i--){
    if(i == mid){
      prel[mid][i] = a[i];
      continue;
    }
    prel[mid][i] = Secret(a[i], prel[mid][i + 1]);
  }

  for(int i = mid + 1; i <= r; i++){
    if(i == mid + 1){
      prer[mid][i] = a[i];
      continue;
    }
    prer[mid][i] = Secret(prer[mid][i - 1], a[i]);
  }

  cmp(l, mid);
  cmp(mid + 1, r);
}
int ans=0;
bool f=1;
void solve(int l, int r, int l1, int r1){
  if(l1 == r1) return;
  int mid = (l1 + r1) / 2;
  if(l <= mid && mid < r && f){
    ans = Secret(prel[mid][l], prer[mid][r]);
    f=0;
    return;
  }

  solve(l, r, l1, mid);
  solve(l, r, mid + 1, r1);
}
void Init(int tmpn, int tmpa[]){
  n = tmpn;
  for(int i = 0; i < n; i++) a[i] = tmpa[i];
  cmp(0, n - 1);
}
int Query(int l, int r){
  if(l == r) return a[l];
  f=1;
  solve(l, r, 0, n - 1);
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...