제출 #141160

#제출 시각아이디문제언어결과실행 시간메모리
141160babo비밀 (JOI14_secret)C++14
0 / 100
607 ms8752 KiB
//#include "secret.h" #include <bits/stdc++.h> void Init(int N, int A[]); int Query(int L, int R); int Secret(int X, int Y); int tr[10][2020]; int a[2020]; int n; void bin(int now,int s,int e){ int i,sum; int mid=(s+e)/2; for(i=mid,sum=a[mid];i<e;i++) { tr[now][i]=sum; if(i+1<e) sum=Secret(sum,a[i+1]); } for(i=mid-1,sum=a[mid-1];i>=s;i--) { tr[now][i]=sum; if(i-1>=s) sum=Secret(a[i-1],sum); } if(e<=s+2) return; bin(now+1,s,mid); bin(now+1,mid,e); } void Init(int N,int A[]){ n=N; for(int i=0;i<n;i++) a[i]=A[i]; bin(1,0,n); /*for(int i=1;i<=9;i++) { for(int j=0;j<N;j++) { printf("%d ",tr[i][j]); } puts(""); }*/ } int bin2(int now,int s,int e,int l,int r){ int mid=(s+e)/2; if(s>r||e<l) return -1; if(l<=mid&&r>=mid) { if(l==mid) return tr[now][r-1]; if(r==mid) return tr[now][l]; return Secret(tr[now][l],tr[now][r-1]); } int temp1=bin2(now+1,s,mid,l,r); int temp2=bin2(now+1,mid,e,l,r); //printf("%d %d %d %d %d: %d\n",now,s,e,l,r,temp1==-1?temp2:temp1); if(temp1==-1) return temp2; return temp1; } int Query(int l,int r){ return bin2(1,0,n,l,r+1); }
#Verdict Execution timeMemoryGrader output
Fetching results...