제출 #1256825

#제출 시각아이디문제언어결과실행 시간메모리
1256825justin비밀 (JOI14_secret)C++20
100 / 100
351 ms8336 KiB
#include "secret.h" #include <bits/stdc++.h> using namespace std; static int N; static int A[1010]; static int table[1010][1010]; // cache untuk nilai ★ // Build tabel dengan divide and conquer void build(int l, int r) { if (l == r) { table[l][l] = A[l]; return; } int mid = (l + r) / 2; build(l, mid); build(mid + 1, r); // Precompute dari mid ke kiri table[mid][mid] = A[mid]; for (int i = mid - 1; i >= l; i--) { table[i][mid] = Secret(A[i], table[i + 1][mid]); } // Precompute dari mid+1 ke kanan table[mid + 1][mid + 1] = A[mid + 1]; for (int i = mid + 2; i <= r; i++) { table[mid + 1][i] = Secret(table[mid + 1][i - 1], A[i]); } } // Fungsi Init void Init(int n, int arr[]) { N = n; for (int i = 0; i < n; i++) A[i] = arr[i]; build(0, N - 1); } // Fungsi Query int Query(int L, int R) { if (L == R) return A[L]; int l = 0, r = N - 1; while (l < r) { int mid = (l + r) / 2; if (R <= mid) { r = mid; } else if (L > mid) { l = mid + 1; } else { return Secret(table[L][mid], table[mid + 1][R]); } } return A[L]; }
#Verdict Execution timeMemoryGrader output
Fetching results...