#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
int m;
vector<int> vect, x, y;
vector<pii> ord;
void dnc(int node, int d){
if (d){
x[node-1]=-2*node;
y[node-1]=-2*node-1;
dnc(2*node, d-1);
dnc(2*node+1, d-1);
}
else ord.pb(mp(node-1, 0)), ord.pb(mp(node-1, 1));
}
void create_circuit(int M, vector<int> A){
m=M;
vect=A;
vect.pb(-1);
vector<int> c(m+1, -1);
int dep=ceil(log2(vect.size()));
x.resize((1<<dep)-1, -1);
y.resize((1<<dep)-1, -1);
dnc(1, dep-1);
vector<bool> done(ord.size(), 0);
while (vect.size()<ord.size())vect.pb(-1);
for (int i=19, p=0; i>=0&&p<vect.size(); --i){
vector<int> id;
for (int j=0; j<ord.size(); j+=(1<<i))if (!done[j])id.pb(j);
if (!(id.size()%2)){
for (int j=0; j<id.size()/2; ++j){
if (ord[id[j]].se)y[ord[id[j]].fi]=vect[p], ++p;
else x[ord[id[j]].fi]=vect[p], ++p;
if (ord[id[j+id.size()/2]].se)y[ord[id[j+id.size()/2]].fi]=vect[p], ++p;
else x[ord[id[j+id.size()/2]].fi]=vect[p], ++p;
done[id[j]]=done[id[j+id.size()/2]]=1;
}
}
}
y[y.size()-1]=0;
answer(c, 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... |