Submission #1100950

#TimeUsernameProblemLanguageResultExecution timeMemory
1100950doducanhSecret (JOI14_secret)C++14
100 / 100
342 ms8268 KiB
///breaker #include "secret.h" #include<bits/stdc++.h> #define ll long long #define fi first #define se second #define ii pair<int,int> #define mp make_pair #define in(x) freopen(x,"r",stdin) #define out(x) freopen(x,"w",stdout) #define bit(x,i) ((x>>i)&1) #define lc (id<<1) #define rc ((id<<1)^1) const int maxn=1005; int pre[maxn][maxn]; int a[maxn]; int n; void dac(int l,int r) { int m=(l+r)/2; pre[m][m]=a[m]; pre[m+1][m+1]=a[m+1]; for(int i=m+2;i<=r;i++){ pre[m+1][i]=Secret(pre[m+1][i-1],a[i]); } for(int i=m-1;i>=l;i--){ pre[m][i]=Secret(a[i],pre[m][i+1]); } if(l<m)dac(l,m); if(m+1<r)dac(m+1,r); } void Init(int N,int A[]) { n=N; for(int i=0;i<n;i++){ a[i]=A[i]; } dac(0,n-1); } int Query(int l,int r) { int lo=0,hi=n-1; while(lo!=hi){ int m=(lo+hi)/2; if(m>=l&&m<r){ return Secret(pre[m][l],pre[m+1][r]); } else if(m==r){ return pre[m][l]; } else if(m<l){ lo=m+1; } else hi=m; } return pre[lo][lo]; } /* stuff you should look for * int overflow, array bounds * special cases (n=1?) * do smth instead of nothing and stay organized * WRITE STUFF DOWN * DON'T GET STUCK ON ONE APPROACH */
#Verdict Execution timeMemoryGrader output
Fetching results...