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>
using namespace std;
#include "doll.h"
vector<int> s, x(1<<18), y(1<<18), a;
int cnt, v, b, ind, rt;
int next() {
int j = 0;
for(int k = 0; k < b; k++)
if(v & (1<<k)) j |= 1<<(b-k-1);
s[j+=ind] = -rt-1, ++v;
return j;
}
int dfs(int l, int r, int u) {
if(r - l > 2) {
int m = (l + r) / 2;
x[u] = -1-dfs(l, m, cnt++);
y[u] = -1-dfs(m, r, cnt++);
} else {
x[u] = a[next()];
y[u] = a[next()];
}
return u;
}
void create_circuit(int M, vector<int> A) {
int N = A.size();
s.resize(M+1), a = A;
for(b = 0; b < 20; b++){
if(N & (1<<b)){
s[rt] = -cnt++-1;
rt = cnt-1, v = 0;
dfs(0, 1<<b, rt);
rt = a[(ind+=1<<b)-1];
}
}
s[rt] = 0;
x.resize(cnt);
y.resize(cnt);
answer(s, x, y);
}
# | 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... |