This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "messy.h"
using namespace std;
vector<int> restore_permutation(int n, int w, int r){
    function<void(int,int)> sol1=[&](int l,int r){
        if(l==r)return;
        int m=(l+r)/2;
        string str(n,'1');
        for(int i=l;i<=r;i++)str[i]='0';
        for(int i=l;i<=m;i++){
            string res=str;
            res[i]='1';
            add_element(res);
        }
        sol1(l,m);
        sol1(m+1,r);
    };
    sol1(0,n-1);
    compile_set();
    vector<int> p(n);
    function<void(int,int,vector<int>)> sol2=[&](int l,int r,vector<int> b){
        if(l==r)return;
        int m=(l+r)/2;
        string str(n,'0');
        vector<int> vl,vr;
        for(auto x:b)str[x]='1';
        for(int i=0;i<n;i++){
            if(str[i]=='1')continue;
            string res=str;
            res[i]='1';
            if(check_element(res))vl.emplace_back(i);
            else vr.emplace_back(i);
        }
        if(vl.size()==1)p[vl[0]]=l;
        if(vr.size()==1)p[vr[0]]=r;
        for(auto x:b)vl.emplace_back(x);
        for(auto x:b)vr.emplace_back(x);
        sol2(l,m,vr);
        sol2(m+1,r,vl);
    };
    sol2(0,n-1,vector<int>(0));
    return p;
}
| # | 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... |