Submission #1294161

#TimeUsernameProblemLanguageResultExecution timeMemory
1294161papauloSecret (JOI14_secret)C++20
0 / 100
338 ms4456 KiB
#include "secret.h"
#include <bits/stdc++.h>
using namespace std;

#define MAXN 1010
#define MAXD 15
int x[MAXN];
int suf[MAXD][MAXN];
int pref[MAXD][MAXN];
int n;

void dqc(int l, int r, int d) {
  if(l>r) return;
  int mid=(l+r)/2;
  dqc(l, mid-1, d+1);
  dqc(mid+1, r, d+1);
  suf[d][mid]=x[mid];
  if(mid+1<=r) pref[d][mid+1]=x[mid+1];
  for(int i=mid-1;i>=l;i--) suf[d][i]=Secret(suf[d][i+1], x[i]);
  for(int i=mid+2;i<=r;i++) pref[d][i]=Secret(pref[d][i-1], x[i]);
}

int query(int l, int r, int p, int q, int d) {
  int mid=(l+r)/2;
  if(q<mid) return query(l, mid-1, p, q, d+1);
  if(p>mid) return query(mid+1, r, p, q, d+1);
  if(q==mid) return suf[d][p];
  return Secret(suf[d][p], pref[d][q]);
}

void Init(int N, int A[]) {
  n=N;
  for(int i=0;i<n;i++) x[i]=A[i];
  dqc(0, N-1, 0);
}

int Query(int L, int R) {
  return query(0, n-1, L, R, 0);
}
#Verdict Execution timeMemoryGrader output
Fetching results...