제출 #1358208

#제출 시각아이디문제언어결과실행 시간메모리
1358208nagorn_ph비밀 (JOI14_secret)C++20
0 / 100
297 ms12276 KiB
#include "secret.h"
#include <bits/stdc++.h>
#define pii pair <int, int>
#define emb emplace_back
#define all(a) a.begin(), a.end()

using namespace std;

const int N = 1005;

int n, a[N], pref[N][N], suf[N][N];

struct {
    int seg[4 * N];
    void build(int l, int r){
        if (l >= r) return;
        int mid = (l + r) / 2;
        pref[mid][mid + 1] = a[mid + 1];
        for (int i = mid + 2; i <= r; i++) pref[mid][i] = Secret(pref[mid][i - 1], a[i]);
        suf[mid][mid] = a[mid];
        for (int i = mid - 1; i >= l; i--) suf[mid][i] = Secret(a[i], suf[mid][i + 1]);
        build(l, mid), build(mid + 1, r);
    }
    int query(int l, int r, int ll, int rr){
        if (l == r) return l;
        int mid = (l + r) / 2;
        if (ll <= mid && rr > mid) return mid;
        if (rr <= mid) return query(l, mid, ll, rr);
        else return query(mid + 1, r, ll, rr);
    }
} seg;

void Init(int Nn, int A[]) {
    n = Nn;
    for (int i = 1; i <= n; i++) a[i] = A[i - 1];
    seg.build(1, n);
}

int Query(int L, int R) {
    int l = L + 1, r = R + 1;
    int idx = seg.query(1, n, l, r);
    return Secret(suf[idx][l], pref[idx][r]);
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…