Submission #286175

#TimeUsernameProblemLanguageResultExecution timeMemory
286175YJUSecret (JOI14_secret)C++14
100 / 100
513 ms8696 KiB
#include<bits/stdc++.h> #include "secret.h" #pragma GCC optimize("unroll-loops,no-stack-protector") using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll,ll> pll; const ll MOD=1e9+7; const ll MOD2=998244353; const ll N=1e3+5; const ld pi=3.14159265359; const ll INF=(1LL<<60); #define SQ(i) ((i)*(i)) #define REP(i,n) for(ll i=0;i<n;i++) #define REP1(i,n) for(ll i=1;i<=n;i++) #define pb push_back #define mp make_pair #define X first #define Y second #define setp setprecision #define lwb lower_bound #define SZ(_a) (ll)_a.size() int pre[N][N],suf[N][N],n,u[N]; void Init(int N,int *a){ n=N; REP(i,n)u[i]=a[i]; function<void(int,int)> build = [&](int l,int r){ if(l>=r)return ; ll mid=(l+r+1)/2; build(l,mid-1);build(mid+1,r); pre[mid][mid]=a[mid]; suf[mid][mid-1]=a[mid-1]; for(int i=mid+1;i<=r;i++)pre[mid][i]=Secret(pre[mid][i-1],a[i]); for(int i=mid-2;i>=l;i--)suf[mid][i]=Secret(a[i],suf[mid][i+1]); }; build(0,N-1); } int q(int l,int r,int ql,int qr){ ll mid=(l+r+1)/2; if(qr<mid-1)return q(l,mid-1,ql,qr); if(ql>mid)return q(mid+1,r,ql,qr); if(ql==mid)return pre[mid][qr]; if(qr==mid-1)return suf[mid][ql]; return Secret(suf[mid][ql],pre[mid][qr]); } int Query(int L,int R){ if(L==R)return u[L]; return q(0,n-1,L,R); }
#Verdict Execution timeMemoryGrader output
Fetching results...