| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1292446 | basa | Secret (JOI14_secret) | C++20 | 0 ms | 0 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;
void solve(int l, int r, int l1, int r1){
if(l1 == r1) return;
int mid = (l1 + r1) / 2;
if(l <= mid && mid < r){
ans = Secret(prel[mid][l], prer[mid][r]);
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;
}
