Submission #1280035

#TimeUsernameProblemLanguageResultExecution timeMemory
1280035swishy123Secret (JOI14_secret)C++20
100 / 100
348 ms4444 KiB
#include <bits/stdc++.h>
#include "secret.h"

using namespace std;

const int def = 1001;
int n;
int a[def];
int f[10][def];

// int Secret(int X, int Y) {
//     return (X + 2 * (Y / 2) < 1e9) ? (X + 2 * (Y / 2)) : 1e9;
// }

void build(int l, int r, int k){
    if (l >= r)
        return;

    int mid = (l + r) / 2;
    int crr = a[mid];

    for (int i = mid; i >= l; i--){
        f[k][i] = crr;
        if (i > l)
            crr = Secret(a[i - 1], crr);
    }
    crr = a[mid + 1];
    for (int i = mid + 1; i <= r; i++){
        f[k][i] = crr;
        if (i < r)
            crr = Secret(crr, a[i + 1]);
    }

    build(l, mid, k + 1);
    build(mid + 1, r, k + 1);
}

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

int Query(int l, int r){
    int L = 0, R = n - 1, k = 0;
    while (1){
        int mid = (L + R) / 2;
        if (l >= L && r <= R){
            if (r == mid)
                return f[k][l];
            if (l == mid + 1)
                return f[k][r];
            if (l <= mid && r > mid)
                return Secret(f[k][l], f[k][r]);
        }
        if (r <= mid)
            R = mid;
        else
            L = mid + 1;
        k++;
    }
}

// main(){
//     ios_base::sync_with_stdio(0);
//     cin.tie(0); cout.tie(0);

//     if (ifstream("input.txt").good()){
//         freopen("input.txt", "r", stdin);
//         freopen("output.txt", "w", stdout); 
//     }

//     int N;
//     cin >> N;

//     int A[N];
//     for (int i = 0; i < N; i++)
//         cin >> A[i];
    
//     Init(N, A);
//     int q;
//     cin >> q;

//     while (q--){
//         int l, r;
//         cin >> l >> r;

//         cout << Query(l, r) << endl;
//     }
// }
#Verdict Execution timeMemoryGrader output
Fetching results...