Submission #223019

#TimeUsernameProblemLanguageResultExecution timeMemory
223019aggu_01000101Secret (JOI14_secret)C++14
0 / 100
20091 ms8316 KiB
#include "secret.h" #define mid(l, u) ((l+u)/2) #define lchild(i) (i*2 + 1) #define rchild(i) (i*2 + 2) using namespace std; int DP[1000][1000]; int segtree[4000]; int n; int build(int l, int u, int i, int a[]){ if(l==u) return DP[l][u] = segtree[i] = a[l]; return DP[l][u] = segtree[i] = Secret(build(l, mid(l, u), lchild(i), a), build(mid(l, u)+1, u, rchild(i), a)); } int query(int l, int u, int i, int ll, int uu){ //if(DP[ll][uu]>-1) return DP[ll][uu]; if(l>=ll && u<=uu) return segtree[i]; if(l>mid(l, u)) return query(mid(l, u)+1, u, rchild(i), ll, uu); if(u<=mid(l, u)) return query(l, mid(l, u), lchild(i), ll, uu); return DP[ll][uu] = Secret(query(l, mid(l, u), lchild(i), ll, mid(l, u)), query(mid(l, u)+1, u, rchild(i), mid(l, u)+1, uu)); } void Init(int N, int A[]){ n = N; /*for(int i = 0;i<n;i++){ for(int j = 0;j<n;j++) DP[i][j] = -1; } for(int i = 0;i<n;i++){ for(int j = i+1;j<n;j++){ query(0, n-1, 0, i, j); } }*/ build(0, n-1, 0, A); } int Query(int L, int R){ return query(0, n-1, 0, L, R); } //-2 4 5 5 6 8 //8 -2 6 4 5 5 //5 5 4 6 -2 8
#Verdict Execution timeMemoryGrader output
Fetching results...