Submission #1344675

#TimeUsernameProblemLanguageResultExecution timeMemory
1344675Godgift42Secret (JOI14_secret)C++20
100 / 100
295 ms8364 KiB
#include "secret.h"
using namespace std;
#include <bits/stdc++.h>


vector<vector<int>> pr;
vector<int> a;
int n;

void dc(int l, int r){
  if(r<l)return;
  if(l==r){
    pr[l][l]=a[l];
    return;
  }
  int mid=(l+r)/2;
  pr[mid][mid]=a[mid];
  pr[mid+1][mid+1]=a[mid+1];
  for(int i=mid+2;i<=r;i++)pr[mid+1][i]=Secret(pr[mid+1][i-1],a[i]);
  for(int i=mid-1;i>=l;i--)pr[i][mid]=Secret(a[i],pr[i+1][mid]);
  dc(l,mid);dc(mid+1,r);
}

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

int Query(int L, int R) {
  int a=0;
  int b=n-1;
  while(a!=b){
    int mid=(a+b)/2;
    if(L<=mid and R>mid)return Secret(pr[L][mid],pr[mid+1][R]);
    if(R==mid)return pr[L][mid];
    if(L>mid)a=mid+1;
    else b=mid;
  }
  return pr[a][b];
}
#Verdict Execution timeMemoryGrader output
Fetching results...