Submission #361539

#TimeUsernameProblemLanguageResultExecution timeMemory
361539shahriarkhanSecret (JOI14_secret)C++14
100 / 100
515 ms4516 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(a[i],pre[d][i+1]) ; } 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,L,R,0) ; }
#Verdict Execution timeMemoryGrader output
Fetching results...