Submission #1338891

#TimeUsernameProblemLanguageResultExecution timeMemory
1338891luvwinterSecret (JOI14_secret)C++17
100 / 100
350 ms11040 KiB
#include<bits/stdc++.h>
#include "secret.h"
#define boost() ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define fo freopen((NAME+".INP").c_str(), "r", stdin), freopen((NAME+".OUT").c_str(), "w", stdout)
#define dd long double
#define pii pair<int , int>
#define pb push_back
#define pf push_front
#define ppf pop_front
#define ppb pop_back
#define in insert
#define lb lower_bound
#define ub upper_bound
#define FOR(i , l , r) for(int i = (l) ; i <= (r) ; i ++)
#define FOD(i , r , l) for(int i = (r) ; i >= (l) ; i --)
#define endl '\n'
#define all(x) x.begin() , x.end()
#define sz(a) (int)a.size()
#define fi first
#define se second
#define mp make_pair

using namespace std;

const string NAME = "";
const int N = 1005;
pair<long long, bool> val[N][N];
void preprocess(int l, int r, int a[]){
    if(l==r) return;
    int mid=(l+r)>>1;
    preprocess(l,mid,a);
    preprocess(mid+1,r,a);
    FOD(i , mid - 1 , l) if(!val[i][mid].se) val[i][mid].fi= Secret(a[i],val[i+1][mid].fi), val[i][mid].se=1;
    FOR(i , mid + 2 , r) if(!val[mid+1][i].se) val[mid+1][i].fi=Secret(val[mid+1][i-1].fi,a[i]), val[mid+1][i].se=1;
}
void Init(int n, int a[]){
    FOR(i , 0 , n - 1) val[i][i].fi=a[i], val[i][i].se=1;
    preprocess(0,n-1,a);
}
int Query(int l, int r){
    if(val[l][r].se) return val[l][r].fi;
    FOR(i , l , r - 1) if(val[l][i].se&&val[i+1][r].se) return Secret(val[l][i].fi,val[i+1][r].fi);
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...