#include "minerals.h"
#include <vector>
#include <iostream>
std::vector<int> z1;
std::vector<int> z2;
std::vector<int> zmapowane;
int lastop=0;
int QProxy(int a){
    return lastop= Query(a);
}
void reksolve(int tl, int tr, std::vector<int> can,bool odw){
    std::vector<int> lewi,prawi;
    if(tl==tr) {
        zmapowane[tl]=can[0];
        return;
    }
    int tm=(tl+tr)/2;
    if(!odw) for(int i=tm+1;i<=tr;i++)
        QProxy(z1[i]);
    else for(int i=tl;i<=tm;i++)
        QProxy(z1[i]);
    for(auto x: can){
        int prev=lastop;
        int res = QProxy(x);
        if(prev==res)
            lewi.push_back(x);
        else
            prawi.push_back(x);
    }
    reksolve(tl,tm,lewi,false);
    reksolve(tm+1,tr,prawi,true);
}
void Solve(int N) {
    int lastv=0;
    zmapowane.resize(N);
    for(int i=1;i<=2*N;i++){
        int ans = QProxy(i);
        if(ans==lastv) z2.push_back(i);
        else z1.push_back(i);
        lastv=ans;
    }
    reksolve(0,N-1,z2,false);
    for(int i=0;i<N;i++){
        Answer(zmapowane[i],z1[i]);
    }
}
| # | 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... |