# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
77265 | 2018-09-24T14:19:37 Z | MohamedAhmed0 | Secret (JOI14_secret) | C++14 | 0 ms | 0 KB |
#include <bits/stdc++.h> using namespace std ; #include "secret.h" int arr[100001] , arr1[1001][1001]; #define MAX_VALUE 1000000000 void build(int left , int right) { if(left == right) { arr1[left][left] = arr[left]; return ; } int mid = (left + right) >> 1 ; build(left , mid) ; build(mid + 1, right); arr1[left][right] = Secret(arr1[left][mid] , arr1[mid+1][right]); } int solve(int left , int right , int l , int r) { if(left > r || right < l) return -1 ; if(left >= l && right <= r) return arr1[left][right] ; int mid = (left + right) >> 1 ; int x = solve(left , mid , l , r); int y = solve(mid + 1 , right , l , r); if(x != -1 && y != -1) return Secret(x , y); else if(x == -1) return y ; else if(y == -1) return x ; } void Init(int N, int A[]) { for(int i = 0 ; i < N ; ++i) arr[i] = A[i] ; build(0 , N-1); } int Query(int l, int r) { return solve(0 , N-1 , l , r); }