#include <bits/stdc++.h>
#include "messy.h"
// #include "grader.cpp"
using namespace std;
#define sz(v) (int)v.size()
int N;
vector<int> res;
void f1(int l, int r) {
if (l == r) return;
string s(N, '1');
for (int i = l; i <= r; i++)
s[i] = '0';
// cout << "\nf1 " << l << ' ' << r << endl;
int md = (l + r) >> 1;
for (int i = l; i <= md; i++) {
s[i] = '1';
// cout << s << endl;
// add_element("1011");
add_element(s);
s[i] = '0';
}
f1(l, md);
f1(md + 1, r);
}
void f2(int l, int r, vector<int> v) {
if (l == r) return res[v[0]] = l, void();
string s(N, '1');
for (int i = l; i <= r; i++)
s[v[i - l]] = '0';
// cout << "\nf2 " << l << ' ' << r << ' ' << s << endl << "v ";
// for (auto i : v)
// cout << i << ' ';
// cout << endl;
vector<int> u1, u2;
for (int i = l; i <= r; i++) {
s[v[i - l]] = '1';
// cout << s << endl;
if (check_element(s)) u1.push_back(v[i - l]);
else u2.push_back(v[i - l]);
s[v[i - l]] = '0';
}
// cout << "u1 ";
// for (auto i : u1)
// cout << i << ' ';
// cout << endl << "u2 ";
// for (auto i : u2)
// cout << i << ' ';
// cout << endl;
int md = (l + r) >> 1;
f2(l, md, u1);
f2(md + 1, r, u2);
}
vector<int> restore_permutation(int n, int w, int r) {
N = n;
vector<int> v(n);
iota(v.begin(), v.end(), 0);
f1(0, n - 1);
compile_set();
res.assign(N, 0);
f2(0, n - 1, v);
return res;
}
Compilation message (stderr)
messy.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
messy_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
# | 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... |