Submission #1247285

#TimeUsernameProblemLanguageResultExecution timeMemory
1247285rythm_of_knightMinerals (JOI19_minerals)C++17
40 / 100
19 ms5944 KiB
#include "minerals.h" #include <bits/stdc++.h> using namespace std; void Solve(int N) { vector <int> a, b; int cnt = 0, 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; } vector <int> tl(n, -1), tr(n, n - 1), g[n]; int LG = 0, temp = n; while (temp) LG++, temp >>= 1; for (int phase = 0; phase < LG; phase++) { for (int i = 0; i < n; i++) g[i].clear(); for (int i = 0; i < n; i++) { if (tl[i] + 1 < tr[i]) { g[tl[i] + tr[i] >> 1].push_back(i); } } if (phase & 1) { for (int i = 0; i < n; i++) { cnt = Query(a[i]); for (int j : g[i]) { int tmp = Query(b[j]); if (tmp == cnt) { tr[j] = i; } else { tl[j] = i; } cnt = tmp; } } } else { for (int i = n - 1; i >= 0; i--) { for (int j : g[i]) { int tmp = Query(b[j]); if (tmp == cnt) { tr[j] = i; } else { tl[j] = i; } cnt = tmp; } cnt = Query(a[i]); } } } for (int i = 0; i < n; i++) Answer(a[tr[i]], b[i]); }
#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...