#include "minerals.h"
#include "bits/stdc++.h"
using ll = long long;
using namespace std;
int indices[2*43000 + 5];
map<int, vector<int>> pairs;
int N;
void dnc(int marker, int nPairs) {
if (nPairs == 0) return;
if (nPairs == 1) return;
int targetPairs = nPairs / 2;
//std::cerr << marker << ' ' << nPairs << '\n';
for (int i = 1; i <= 2 * N; ++i) {
if (indices[i] != marker) continue;
int uniques = Query(i);
if (uniques > targetPairs) {
Query(i);
indices[i] = marker * 2 + 1;
}
}
int last = 0;
for (int i = 1; i <= 2 * N; ++i) {
if (indices[i] == marker) {
last = Query(i);
indices[i] = marker * 2;
}
}
assert(last == 0);
dnc(marker * 2, targetPairs);
dnc(marker * 2 + 1, nPairs - targetPairs);
}
void Solve(int V) {
N = V;
//std::cerr << "solving" <<'\n';
fill(indices, indices + 2 * N + 5, 1);
pairs.clear();
dnc(1, N);
for (int i = 1; i <= 2 * N; ++i) pairs[indices[i]].emplace_back(i);
for (auto &x : pairs) {
Answer(x.second[0], x.second[1]);
}
}
# | 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... |