Submission #1311532

#TimeUsernameProblemLanguageResultExecution timeMemory
1311532FaresSTHSecret (JOI14_secret)C++20
100 / 100
337 ms4324 KiB
#include"bits/stdc++.h"
#include "secret.h"
using namespace std;
using ll=long long;
#define S second
#define F first
const int N=10;
vector<vector<int>>dst(N,vector<int>(1<<N,-1));
vector<int>a;
bool bt(int x,int y){
	return (x&(1<<(9-y)))>0;
}
void Init(int n,int A[]){
	for(int i=0;i<n;i++)a.push_back(A[i]);
	for(int l=0;l<10;l++){
		for(int i=0;i<n;i++){
			if(bt(i,l)){
				if(!bt(i-1,l))dst[l][i]=a[i];
				else dst[l][i]=Secret(dst[l][i-1],a[i]);
			}
		}
		for(int i=n-1;i>=0;i--){
			if(!bt(i,l)){
				if(bt(i+1,l)||i==n-1)dst[l][i]=a[i];
				else dst[l][i]=Secret(a[i],dst[l][i+1]);
			}
		}
	}
}
int Query(int l,int r){
	if(l==r)return a[l];
	int msb=__builtin_clz(l^r)-22;
	// int res=a[l];
	// for(int i=l+1;i<=r;i++)res=Secret(res,a[i]);
	// return res;
	return Secret(dst[msb][l],dst[msb][r]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...