Submission #543185

# Submission time Handle Problem Language Result Execution time Memory
543185 2022-03-29T16:59:42 Z _karan_gandhi Secret (JOI14_secret) C++17
100 / 100
472 ms 4492 KB
#include "secret.h"
#include <bits/stdc++.h>

using namespace std;

int MX_lv = 20;
int n;
vector<int> arr;
vector<vector<int>> dat;

void divi(int l, int r, int level) {
	if (l == r) return;
	assert(level < MX_lv);

	int mid = (l + r) / 2;
	dat[mid][level] = arr[mid];
	dat[mid + 1][level] = arr[mid + 1];

	for (int i = mid - 1; i >= l; i--) {
		dat[i][level] = Secret(arr[i], dat[i + 1][level]);
	}

	for (int i = mid + 2; i <= r; i++) {
		dat[i][level] = Secret(dat[i - 1][level], arr[i]);
	}

	divi(l, mid, level + 1);
	divi(mid + 1, r, level + 1);
}

void Init(int N, int A[]) {
	n = N;
	arr.resize(n);
	dat = vector<vector<int>>(N, vector<int>(MX_lv));

	for (int i = 0; i < n; i++) {
		arr[i] = A[i];
	}

	divi(0, n - 1, 0);
}

int Query(int L, int R) {
	if (L == R) return arr[L];

	// binary search to find the level
	int hi = n - 1, lo = 0;
	int lv = 0;

	while (hi >= lo) {
		int mid = (hi + lo) / 2;

		if (L <= mid && mid < R) {
			return Secret(dat[L][lv], dat[R][lv]);
		} else if (L > mid) {
			lo = mid + 1;
		} else {
			hi = mid;
		}
		lv++;
	}
	assert(0);

	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 125 ms 2380 KB Output is correct - number of calls to Secret by Init = 3578, maximum number of calls to Secret by Query = 1
2 Correct 124 ms 2432 KB Output is correct - number of calls to Secret by Init = 3586, maximum number of calls to Secret by Query = 1
3 Correct 126 ms 2324 KB Output is correct - number of calls to Secret by Init = 3595, maximum number of calls to Secret by Query = 1
4 Correct 434 ms 4456 KB Output is correct - number of calls to Secret by Init = 7969, maximum number of calls to Secret by Query = 1
5 Correct 439 ms 4300 KB Output is correct - number of calls to Secret by Init = 7978, maximum number of calls to Secret by Query = 1
6 Correct 435 ms 4460 KB Output is correct - number of calls to Secret by Init = 7978, maximum number of calls to Secret by Query = 1
7 Correct 444 ms 4492 KB Output is correct - number of calls to Secret by Init = 7978, maximum number of calls to Secret by Query = 1
8 Correct 438 ms 4444 KB Output is correct - number of calls to Secret by Init = 7978, maximum number of calls to Secret by Query = 1
9 Correct 472 ms 4384 KB Output is correct - number of calls to Secret by Init = 7978, maximum number of calls to Secret by Query = 1
10 Correct 437 ms 4292 KB Output is correct - number of calls to Secret by Init = 7978, maximum number of calls to Secret by Query = 1