Submission #1304119

#TimeUsernameProblemLanguageResultExecution timeMemory
1304119WarinchaiSecret (JOI14_secret)C++20
100 / 100
335 ms4464 KiB
#include "secret.h"
#include<bits/stdc++.h>
using namespace std;

int ans[15][1005];
int val[1005];
int n;

struct seg{
    void build(int st,int en,int lv){
        int m=(st+en)/2;
        ans[lv][m]=val[m];
        if(st==en)return;
        for(int i=m-1;i>=st;i--)ans[lv][i]=Secret(val[i],ans[lv][i+1]);
        ans[lv][m+1]=val[m+1];
        for(int i=m+2;i<=en;i++)ans[lv][i]=Secret(ans[lv][i-1],val[i]);
        //cerr<<"build:"<<st<<" "<<en<<"\n";
        //for(int i=st;i<=en;i++)cerr<<ans[lv][i]<<" ";
        //cerr<<"\n";
        build(st,m,lv+1);
        build(m+1,en,lv+1);
    }
    int fans(int st,int en,int l,int r,int lv){
        int m=(st+en)/2;
        if(st==en){
            //cerr<<"st,en:"<<l<<" "<<m<<" "<<r<<" "<<val[st]<<"\n";
            return val[st];
        }
        if(r<=m)return fans(st,m,l,r,lv+1);
        else if(l>=m+1)return fans(m+1,en,l,r,lv+1);
        else{
            //cerr<<"st,en:"<<l<<" "<<m<<" "<<r<<" "<<ans[lv][l]<<" "<<ans[lv][r]<<"\n";
            return Secret(ans[lv][l],ans[lv][r]);
        }
    }
}tr;

void Init(int N, int A[]) {
    n=N;
    for(int i=0;i<=10;i++)for(int j=0;j<=n+1;j++)ans[i][j]=0;
    for(int i=1;i<=n;i++)val[i]=A[i-1];
    tr.build(1,n,1);
}

int Query(int L, int R) {
    //cerr<<"QR:"<<L+1<<" "<<R+1<<"\n";
    return tr.fans(1,n,L+1,R+1,1);
}
#Verdict Execution timeMemoryGrader output
Fetching results...