Submission #1079943

#TimeUsernameProblemLanguageResultExecution timeMemory
1079943juicyMechanical Doll (IOI18_doll)C++17
100 / 100
110 ms10256 KiB
#include "doll.h"

#include <bits/stdc++.h>

using namespace std;

void create_circuit(int m, vector<int> a) {
  a.push_back(0);
  int n = a.size(), s = 1;
  while (s < n) {
    s *= 2;
  }
  vector<int> lt, rt;
  lt.reserve(s);
  rt.reserve(s);
  function<int(int, int)> bld = [&](int l, int r) -> int {
    if (l >= n) {
      return -1;
    }
    if (l == r) {
      return 0;
    }
    int md = (l + r) / 2;
    lt.push_back(0);
    rt.push_back(0);
    int ind = lt.size();
    lt[ind - 1]= bld(l, md);
    rt[ind - 1] = bld(md + 1, r);
    return -ind;
  };
  bld(0, s - 1);
  int node = lt.size();
  vector<int> side(node);
  function<int(int)> crawl = [&](int u) {
    side[u] ^= 1;
    int v = side[u] ? rt[u] : lt[u];
    return !v ? u : crawl(-1 - v);
  };
  for (int x : a) {
    int u = crawl(0);
    (side[u] ? rt[u] : lt[u]) = x;
  }
  answer(vector<int>(m + 1, -1), rt, lt);
}
#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...