Submission #500290

#TimeUsernameProblemLanguageResultExecution timeMemory
500290sidon자동 인형 (IOI18_doll)C++17
100 / 100
123 ms11868 KiB
#include <bits/stdc++.h>
using namespace std;
#include "doll.h"

vector<int> s, x(3e5), y(3e5), z(3e5);
int v, b = 1, n;
 
int dfs(int l, int r) {
	if(l >= n) return -1;
	if(r - l > 1) {
		int m = (l + r) / 2, u = v++;
		y[u] = dfs(l, m);
		x[u] = dfs(m, r);
		return -u-1;
	}
	return 1;
}
 
void create_circuit(int M, vector<int> A) {
	s.assign(M+1, -1);
	A.push_back(0);
	n = size(A);
 
	while(b<n) b += b;
	dfs(0, b);
 
	for(int &i : A) {
		int u = 0;
		while(u >= 0) {
			z[u] ^= 1;
			int &w = z[u] ? x[u] : y[u];
			if(w >= 0) w = i, u = -1;
			else u = -1-w;
		}
	}
	x.resize(v);
	y.resize(v);
	answer(s, 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...