제출 #1215359

#제출 시각아이디문제언어결과실행 시간메모리
1215359AbdullahIshfaqMinerals (JOI19_minerals)C++20
0 / 100
4 ms2768 KiB
#include <bits/stdc++.h> #include "minerals.h" using namespace std; const int MXN = 1e5 + 100; int lo[MXN], hi[MXN]; vector<int> a, b, vec[MXN]; set<int> M, done; int cur, pre; bool Q(int i) { cur = Query(i); bool changed = (cur != pre); pre = cur; return changed; } void Solve(int n){ pre = 0; for (int i = 1; i <= 2 * n; ++i) { if (Q(i)) a.push_back(i); else b.push_back(i); } for (int i : a) { lo[i] = -1; hi[i] = n - 1; int mid = (lo[i] + hi[i]) / 2; vec[mid].push_back(i); M.insert(mid); } while (!M.empty()) { int mid = *M.begin(); M.erase(mid); for (int x : vec[mid]) { pre = 0; for (int i = 0; i <= mid; ++i) Q(b[i]); bool matched = Q(x); if (matched) hi[x] = mid; else lo[x] = mid; if (hi[x] - lo[x] > 1) { int newmid = (lo[x] + hi[x]) / 2; vec[newmid].push_back(x); M.insert(newmid); } else { done.insert(x); } } vec[mid].clear(); } for (int x : a) Answer(x, b[hi[x]]); }
#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...