Submission #1358562

#TimeUsernameProblemLanguageResultExecution timeMemory
1358562jadai007Unscrambling a Messy Bug (IOI16_messy)C++20
100 / 100
1 ms580 KiB
#include <bits/stdc++.h>
#include "messy.h"

using namespace std;

vector<int> restore_permutation(int n, int w, int r){
    auto fw = [&](auto &&fw, int l, int rg) -> void {
        if(l == rg) return;
        int m = (l + rg) / 2;
        for(int i = l; i <= m; ++i){
            string s(n, '0');
            for(int j = 0; j < n; ++j){
                if(j < l || j > rg) s[j] = '1';
            }
            s[i] = '1';
            add_element(s);
        }
        fw(fw, l, m);
        fw(fw, m + 1, rg);
    };
    fw(fw, 0, n - 1);
    compile_set();
    vector<int> ans(n);
    vector<int> c(n);
    iota(c.begin(), c.end(), 0);
    auto fr = [&](auto &&fr, int l, int rg, vector<int> v) -> void {
        if(l == rg){
            ans[v[0]] = l;
            return;
        }
        int m = (l + rg) / 2;
        vector<int> vl, vr;
        string bs(n, '1');
        for(auto x:v) bs[x] = '0';
        for(auto x:v){
            string s = bs;
            s[x] = '1';
            if(check_element(s)) vl.push_back(x);
            else vr.push_back(x);
        }
        fr(fr, l, m, vl);
        fr(fr, m + 1, rg, vr);
    };
    fr(fr, 0, n - 1, c);
    return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...