Submission #361891

#TimeUsernameProblemLanguageResultExecution timeMemory
361891Lemur95Secret (JOI14_secret)C++17
0 / 100
519 ms8428 KiB
#include <bits/stdc++.h> #include "secret.h" #pragma GCC optimize("Ofast") #define x first #define y second #define ld long double #define ll long long #define ull unsigned long long #define us unsigned short #define lsb(x) ((x) & (-(x))) using namespace std; int n; int v[1005], sum[1005][1005]; /*int Secret(int x, int y) { return x | y; }*/ void divide(int st, int dr) { if(st == dr || st + 1 == dr) { //sum[st][st] = v[st]; return; } int mid = (st + dr) >> 1; //sum[mid][mid] = v[mid]; for(int i = mid - 1; i >= st; i--) sum[i][mid] = Secret(sum[i + 1][mid], v[i]); for(int i = mid + 2; i <= dr; i++) sum[mid + 1][i] = Secret(sum[mid + 1][i - 1], v[i]); divide(st, mid); divide(mid + 1, dr); } void Init(int N, int a[]) { n = N; for(int i = 0; i < n; i++) v[i] = a[i], sum[i][i] = a[i]; divide(0, n - 1); } int solve(int st, int dr, int l, int r) { int mid = (st + dr) >> 1; if(l <= mid && mid <= r) { if(l == mid + 1 || mid == r) return sum[l][r]; else return Secret(sum[l][mid], sum[mid + 1][r]); } if(r < mid) return solve(st, mid, l, r); return solve(mid + 1, dr, l, r); } int Query(int l, int r) { if(l == r) return v[l]; if(l + 1 == r) return Secret(v[l], v[l + 1]); return solve(0, n - 1, l, r); } /*int main() { ios_base :: sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, Q, l, r, a[10005]; cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; Init(n, a); cin >> Q; for(; Q; Q--) { cin >> l >> r; cout << Query(l, r) << "\n"; int s = v[l]; for(int i = l + 1; i <= r; i++) s = Secret(s, v[i]); cout << s << " right answer\n"; } return 0; }*/
#Verdict Execution timeMemoryGrader output
Fetching results...