제출 #1292300

#제출 시각아이디문제언어결과실행 시간메모리
1292300eyadoozSecret (JOI14_secret)C++20
0 / 100
336 ms4548 KiB
#include<bits/stdc++.h> #include"secret.h" using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int) (x).size() #define endl '\n' ll s[30][100005], a[100005], n=0; void solve(int l, int r, int lvl) { if(l>r) return; if(l==r) {s[lvl][l]=a[l];return;} int mid=(l+r)/2; s[lvl][mid]=a[mid], s[lvl][mid+1]=a[mid+1]; for(int i=mid+2;i <= r;i++) s[lvl][i]=Secret(s[lvl][i-1], a[i]); for(int i=mid-1;i >= l;i--) s[lvl][i]=Secret(a[i], s[lvl][i+1]); solve(l, mid, lvl+1); solve(mid+1, r, lvl+1); } void Init(int N, int A[]) { n=N; for(int i = 0;i < N;i++) a[i]=A[i]; solve(0, N-1, 0); } int Query(int L, int R) { if(L==R) return a[L]; int mid=n/2; int l=0, r=n-1, lvl=0; while(mid>=R||mid<L) { if(mid>=R) r=mid; else l=mid+1; lvl++; mid=(l+r)/2; } return Secret(s[lvl][L], s[lvl][R]); }
#Verdict Execution timeMemoryGrader output
Fetching results...