#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |