# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
754036 | 2023-06-06T13:44:12 Z | Zflop | 비밀 (JOI14_secret) | C++14 | 0 ms | 0 KB |
#include "secret.h" const int NMAX = (int)1e3; int n; int prec[NMAX][NMAX]; void DC (int l,int r,int A[]){ int m = (l + r) / 2; prec[m][m] = A[m]; prec[m + 1][m + 1] = A[m + 1]; for (int i = m - 1; i >= l;--i) prec[m][i] = Secret(prec[m][i + 1],A[i]); for (int i = m + 2; i <= r;++i) prec[m + 1][i] = Secret(prec[m + 1][i - 1],A[i]); if(l < mid) DC(l,m,A); if(mid + 1 < r) DC(m + 1,r,A); } void Init(int N,int A[]){ n = N; DC(0,N - 1,A); } int Query(int L,int R){ int l = 0,r = n - 1; while(l != r){ int m = (l + r) / 2; if(L <= m && m < R) return Secret(prec[m][L],prec[m + 1][R]); if(R == m) return prec[m][L]; if(L > m) l = m + 1; else r = m; } return prec[l][l]; }