Submission #1139034

#TimeUsernameProblemLanguageResultExecution timeMemory
1139034luanzitoSecret (JOI14_secret)C++20
0 / 100
336 ms4448 KiB
#include "secret.h"
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1e3 + 10;
const int maxl = 1e1 + 5;

int n;
int v[maxn];
int st[maxl][maxn];

void build(int l, int r, int p){
    
    if(l == r){ 
        st[p][l] = v[l];
        return;
    }
    
    int m = (l + r) / 2;
    build(l, m, p + 1);
    build(m + 1, r, p + 1);
    
    st[p][m] = v[m];
    st[p][m + 1] = v[m + 1];
    
    int last = v[m];
    for(int i = m - 1; i >= l; i--)
        st[p][i] = Secret(v[i], st[p][i + 1]);
    
    for(int i = m + 2; i <= r; i++)
        st[p][i] = Secret(v[i], st[p][i - 1]);
    
}

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

int solve(int a, int b, int p, int l, int r){
    
    if(l == r) return st[p][l];
    
    int m = (l + r) / 2;
    if(a <= m && b > m) return Secret(st[p][a], st[p][b]);
    if(a <= m) return solve(a, b, p + 1, l, m);
    else return solve(a, b, p + 1, m + 1, r);
    
}

int Query(int L, int R){
    return solve(L, R, 0, 1, n);
}
#Verdict Execution timeMemoryGrader output
Fetching results...