제출 #1138081

#제출 시각아이디문제언어결과실행 시간메모리
1138081SmuggingSpun비밀 (JOI14_secret)C++20
100 / 100
342 ms8340 KiB
#include "secret.h" #include<bits/stdc++.h> using namespace std; template<class T>void maximize(T& a, T b){ if(a < b){ a = b; } } const int lim = 1e3 + 5; int n, value[lim][lim]; void play(int l, int r){ if(l >= r){ return; } int m = (l + r) >> 1; for(int i = m - 1; i >= l; i--){ if(value[i][m] == -1){ value[i][m] = Secret(value[i][i], value[i + 1][m]); } } for(int i = m + 2; i <= r; i++){ if(value[m + 1][i] == -1){ value[m + 1][i] = Secret(value[m + 1][i - 1], value[i][i]); } } play(l, m - 1); play(m + 1, r); } void Init(int N, int A[]){ memset(value, -1, sizeof(value)); for(int i = 0; i < N; i++){ value[i][i] = A[i]; } play(0, (n = N) - 1); } int Query(int l, int r){ int low = 0, high = n - 1; while(true){ int mid = (low + high) >> 1; if(l <= mid && r >= mid){ return r == mid ? value[l][mid] : Secret(value[l][mid], value[mid + 1][r]); } if(l > mid){ low = mid + 1; } else{ high = mid - 1; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...