제출 #1292328

#제출 시각아이디문제언어결과실행 시간메모리
1292328AliMark71비밀 (JOI14_secret)C++20
100 / 100
343 ms6428 KiB
//
//  main.cpp
//  EliteCamp 2025
//
//  Created by Ali AlSalman on 14/11/2025.
//

#include <bits/stdc++.h>


//#define INTERACTIVE
//#define TESTCASES
//#define SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__

template<typename T>
using vec = std::vector<T>;
using namespace std;

int Secret(int x, int y);

int n;
vec<vec<int>> S;

void myOwnInit(int l, int r, int a[], int d = 0) {
    if (l + 1 == r) {
        S[d][l] = a[l];
        return;
    }
    
    int mid = (l + r) / 2;
    S[d][mid - 1] = a[mid - 1];
    S[d][mid] = a[mid];
    for (int i = mid + 1; i < r; i++)
        S[d][i] = Secret(S[d][i - 1], a[i]);
    for (int i = mid - 2; l <= i; i--)
        S[d][i] = Secret(a[i], S[d][i + 1]);
        
    
    myOwnInit(l, mid, a, d + 1);
    myOwnInit(mid, r, a, d + 1);
}

int myOwnQuery(int l, int r, int ql, int qr, int d = 0) {
    if (l + 1 == r) return S[d][l];
    int mid = (l + r) / 2;
    if (qr <= mid)
        r = mid;
    else if (mid <= ql)
        l = mid;
    else
        return Secret(S[d][ql], S[d][qr - 1]);
    return myOwnQuery(l, r, ql, qr, d + 1);
}

void Init(int n, int a[]) {
    ::n = n;
    S.resize(1<<(31-__builtin_clz(n)), vec<int>(n));
    myOwnInit(0, n, a);
}

int Query(int l, int r) {
    return myOwnQuery(0, n, l, ++r);
}

//int main() {
//#ifndef INTERACTIVE
//    ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
//#endif
//    
//    int t = 1;
//#ifdef TESTCASES
//    cin>>t;
//#endif
//    
//    for (int i = t; i--;) {
//#if defined(TESTCASES) && defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
//        cout<<"Case "<<t-i<<":\n";
//#elif defined(SPOJ_BULLSCHEI__SZ__E__KIJETESANPAKALU__)
//#warning SPOJ_BULLSCHEIßE__KIJETESANPAKALU__ without TESTCASES doesn't ducking make sense!
//#endif
//        solve();
//    }
//    return 0;
//}
#Verdict Execution timeMemoryGrader output
Fetching results...