#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;
const int base = 1 << 15;
// int group[30'002];
int in[30'002];
int n;
vector<int> group[60'002];
vector<int> cors[60'002];
void bipart()
{
int last = 0;
for (int i = 1; i <= 2 * n; i++)
{
int a = Query(i);
if (a == last)
{
cors[1].push_back(i);
Query(i);
}
else
{
group[1].push_back(i);
in[i] = 1;
}
last = a;
}
for (int i = 1; i <= 2*n; i++)
{
if (in[i])
{
in[i] = 0;
Query(i);
}
}
}
void divide(int g)
{
int i = 0;
int last = 0;
if (group[g].size() <= 1)return;
for (; i * 2 < group[g].size(); i++) // wrzucam 1 pol
{
last = Query(group[g][i]);
group[g*2].push_back(group[g][i]);
}
for (; i < group[g].size(); i++)
{
group[g*2+1].push_back(group[g][i]);
}
for (auto i : cors[g])
{
int a = Query(i);
if (last == a)
{
Query(i);
cors[g*2].push_back(i);
}
else
{
Query(i);
cors[g*2+1].push_back(i);
}
}
for (int i = 0; i * 2 < group[g].size(); i++)
{
Query(group[g][i]);
}
divide(g*2);
divide(g*2+1);
}
void Solve(int N) {
n = N;
// for (int i = 1; i <= N; ++i) {
// Answer(i, 2 * N + 1 - i);
// }
bipart();
divide(1);
for (int i = 1; i <= 4*n; i++)
{
if (group[i].size() == 1)
{
Answer(group[i][0], cors[i][0]);
}
}
}
# | 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... |