제출 #1203834

#제출 시각아이디문제언어결과실행 시간메모리
1203834VMaksimoski008비밀 (JOI14_secret)C++20
100 / 100
346 ms8304 KiB
#include "secret.h"
#include <bits/stdc++.h>
using namespace std;

int dat[1005][1005], a[1005], n;

void dnc(int l, int r) {
    if(l >= r) return ;
    int m = (l + r) / 2;

    dat[m][m] = a[m];
    dat[m+1][m+1] = a[m+1];
    for(int i=m-1; i>=l; i--) dat[i][m] = Secret(a[i], dat[i+1][m]);
    for(int i=m+2; i<=r; i++) dat[m+1][i] = Secret(dat[m+1][i-1], a[i]);

    dnc(l, m);
    dnc(m+1, r);
}

int query(int tl, int tr, int l, int r) {
    int m = (tl + tr) / 2;
    if(l <= m && m < r) return Secret(dat[l][m], dat[m+1][r]);
    if(l > m) return query(m+1, tr, l, r);
    return query(tl, m, l, r);
}

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

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