제출 #1196708

#제출 시각아이디문제언어결과실행 시간메모리
1196708aykhn자동 인형 (IOI18_doll)C++20
100 / 100
60 ms12828 KiB
#include "doll.h" #include <bits/stdc++.h> using namespace std; int N, idx, sz; vector<array<int, 3>> o; vector<int> X, Y; void f(int l, int r, int par, int c, int x, int b) { if (l == r) { o.push_back({x, par, c}); return; } int nw = ++idx, mid = (l + r) >> 1; X.push_back(-1), Y.push_back(-1); if (par != -1) { if (!c) X[par - 1] = -nw; else Y[par - 1] = -nw; } if (mid >= sz - N) f(l, mid, nw, 0, x, b + 1); f(mid + 1, r, nw, 1, x | (1 << b), b + 1); } void create_circuit(int M, vector<int> A) { X.clear(), Y.clear(), o.clear(); A.push_back(0); N = A.size(), idx = 0, sz = 1; while (sz < N) sz <<= 1; f(0, sz - 1, -1, -1, 0, 0); sort(o.begin(), o.end()); vector<int> C(M + 1, -1); for (int i = 0; i < N; i++) { auto [t, p, c] = o[i]; if (!c) X[p - 1] = A[i]; else Y[p - 1] = A[i]; } 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...