제출 #1077616

#제출 시각아이디문제언어결과실행 시간메모리
1077616s_tree자동 인형 (IOI18_doll)C++17
84 / 100
100 ms20728 KiB
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6;
vector<int> x(N), y(N), c(N);
vector<int> state(N);
int nodecnt=0, n, pw=1;
int build(int l, int r) {
	if(l >= r)return 0;
	if(r < pw - n) {
		return -1;
	}
	int mid = (l+r)/2;
	int cur = ++nodecnt;
	x[cur-1] = build(l, mid);
	y[cur-1] = build(mid+1, r);
	return -cur;
}
void ins(int i, int val) {
	if(state[-i]) {
		state[-i]^=1;
		if(y[-i-1] == 0) {
			y[-i-1] = val;
		}
		else {
			ins(y[-i-1], val);
		}
	}
	else {
		state[-i]^=1;
		if(x[-i-1] == 0) {
			x[-i-1] = val;
		}
		else {
			ins(x[-i-1], val);
		}
	}
}
void create_circuit(int M, std::vector<int> A) {
	pw = 1;
	n = A.size();
	c=vector<int>(M+1, -1);
	while(pw < n) {
		pw*=2;
	}
	build(0, pw-1);
	for(int i = 1;i<n;i++) {
		ins(-1, A[i]);
	}
	if(n%2 == 1)ins(-1,-1);
	ins(-1,0);
	c[0] = A[0];
	x.resize(nodecnt);
	y.resize(nodecnt);
	answer(c, x, y);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...