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 "doll.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define bit(a , b) (((a)>>(b))&1)
const int maxn = 1e6 + 20;
const int maxb = 20;
int id , pt , R;
int x[maxn] , y[maxn];
vector<int> a , bits;
int build(int n)
{
	if(n == 0)
		return -1;
	int root = id++;
	x[root] = build(n - 1);
	y[root] = build(n - 1);
	return root;
}
int solve(int k)
{
	while(k < bits[0]);
	if(k == bits[0])
		return build(k);
	int xi = lower_bound(bits.begin() , bits.end() , k) - bits.begin();
	if(xi == (int)bits.size())
		cout << 1/0;
	int root = id++;
	if(bits[xi] == k)
	{
		x[root] = build(k);
		y[root] = id;
		x[id] = -1e9;
		id++;
		y[id - 1] = solve(k - 1);
	}
	else
	{
		y[root] = solve(k - 1);
		x[root] = -1e9;
	}
	return root;
}
bool is[maxn];
void dfs(int v)
{
	while(pt < (int)a.size())
	{
		if(!is[v])
		{
			is[v] ^= 1;
			if(x[v] < 0)
				x[v] = a[pt++] + maxn * 10 , v = R;
			else
				v = x[v];
		}
		else
		{
			is[v] ^= 1;
			if(y[v] < 0)
				y[v] = a[pt++] + maxn * 10 , v = R;
			else
				v = y[v];
		}
	}
}
void create_circuit(int m, vector<int> A)
{
	memset(x , -1 , sizeof x);
	memset(y , -1 , sizeof y);
	a = A;
	a.pb(0);
	int n = a.size();
	for(int j = 0; j < 20; j++)
		if(bit(n , j))
			bits.pb(j);
	R = solve(bits.back());
	for(int i = 0; i < id; i++)
		if(x[i] < -maxn)
			x[i] = R;
	dfs(R);
	for(int i = 0; i < id; i++)
	{
		int v = i;
		if(x[v] >= maxn * 10)
			x[v] = x[v] - maxn * 10;
		else
			x[v] = -x[v] - 1;
		if(y[v] >= maxn * 10)
			y[v] = y[v] - maxn * 10;
		else
			y[v] = -y[v] - 1;
	}
	vector<int> res;
	for(int i = 0; i <= m; i++)
		res.pb(-R - 1);
	vector<int> X , Y;
	for(int i = 0; i < id; i++)
		X.pb(x[i]) , Y.pb(y[i]);
	answer(res , X , Y);
}
Compilation message (stderr)
doll.cpp: In function 'int solve(int)':
doll.cpp:38:12: warning: division by zero [-Wdiv-by-zero]
   38 |   cout << 1/0;
      |           ~^~| # | 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... |