Submission #1138081

#TimeUsernameProblemLanguageResultExecution timeMemory
1138081SmuggingSpunSecret (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...