Submission #1247828

#TimeUsernameProblemLanguageResultExecution timeMemory
1247828rythm_of_knightMinerals (JOI19_minerals)C++17
90 / 100
19 ms2788 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; vector <int> a, b; static int cnt = 0, n, m; void rec(int l, int r, int k, vector <int> q) { if (l == r) return Answer(a[l], q[0]), void(); int m = l + r >> 1, lk = k, rk = k; vector <int> lft, rgt; if (k) { for (int i = m + 1; i <= r; i++) cnt = Query(a[i]); rk ^= 1; } else { for (int i = l; i <= m; i++) cnt = Query(a[i]); lk ^= 1; } int lneed = m - l + 1, rneed = r - m; for (int j : q) { if (lft.size() == lneed) { rgt.push_back(j); } else if (rgt.size() == rneed) { lft.push_back(j); } else { int tmp = Query(j); if (tmp == cnt) { lft.push_back(j); } else { rgt.push_back(j); } cnt = tmp; } } rec(l, m, lk, lft); rec(m + 1, r, rk, rgt); } void Solve(int N) { n = N, m = 2 * n; for (int i = 1; i <= m; i++) { int tmp = Query(i); if (tmp != cnt) a.push_back(i); else b.push_back(i); cnt = tmp; } rec(0, n - 1, 1, b); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...