제출 #361537

#제출 시각아이디문제언어결과실행 시간메모리
361537shahriarkhan비밀 (JOI14_secret)C++14
0 / 100
527 ms4492 KiB
#include "secret.h"
#include<bits/stdc++.h>
using namespace std ;

const int mx = 1024 ;

int pre[mx][mx] , a[mx] , n ;

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

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

int dq_c(int l , int r , int ql , int qr , int d)
{
    int mid = (l+r)/2 ;
    if((ql<=mid) && (qr>mid))
    {
        return Secret(pre[d][ql],pre[d][qr]) ;
    }
    if(qr==mid) return pre[d][ql] ;
    if(qr<=mid) return dq_c(l,mid,ql,qr,d+1) ;
    else return dq_c(mid+1,r,ql,qr,d+1) ;
}

int Query(int L , int R)
{
    if(L==R) return a[L] ;
    if(L+1==R) return Secret(a[L],a[R]) ;
    return dq_c(0,n-1,0,L,R) ;
}
#Verdict Execution timeMemoryGrader output
Fetching results...