#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define FOR(i,N) for(ll i = 0; i < N; i++)
#define all(x) (x).begin(), (x).end()
#define F first
#define S second
#include "messy.h"
int n;
vector<unordered_set<int>> v;
vector<int> res;
void add(int l, int r) { // incl, incl
if (l == r) return ;
string x(n, '0');
FOR(i, n) if (i < l || i > r) x[i] = '1';
int m = (l + r) / 2;
for(int i = l; i <= m; i++) { // l->m (not l->r)
x[i] = '1';
add_element(x);
x[i] = '0';
}
add(l, m);
add(m+1, r);
}
void check(int l, int r, int iv) { // incl, incl, segtree indexing
if (l == r) {
res[*v[iv].begin()] = l;
return ;
}
string x(n, '0');
FOR(i, n) if (v[iv].find(i) == v[iv].end()) x[i] = '1';
for(auto i: v[iv]) {
x[i] = '1';
if (check_element(x)) {
v[iv * 2].insert(i);
} else {
v[iv * 2 + 1].insert(i);
}
x[i] = '0';
}
check(l, (l+r) / 2, iv * 2);
check((l+r) / 2 + 1, r, iv * 2 + 1);
}
vector<int> restore_permutation(int n, int w, int r) {
::n = n;
add(0, n-1);
compile_set();
v.resize(n*4);
res.resize(n);
FOR(i, n) v[1].insert(i);
check(0,n-1,1);
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... |