#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
const int maxn = 1e6 + 10;
int n, s, a[maxn], pw, l;
vector <int> X, Y;
vector <int> c;
map <int, int> lf, rg;
void get(int v, int tl, int tr) {
int tm = (tl + tr) / 2;
if (tm <= l) {
lf[v] = -1;
}
if (tm + 1 == tr) {
rg[v] = a[tr];
} else {
s--;
rg[v] = s;
get(s, tm + 1, tr);
}
if (tl == tm && lf[v] == 0) {
lf[v] = a[tl];
} else {
if (lf[v] == 0) {
s--;
lf[v] = s;
get(s, tl, tm);
}
}
}
void create_circuit(int M, std::vector<int> A) {
n = A.size();
pw = 2;
while(pw < n) {
pw *= 2;
}
while(l + n < pw) {
l++;
a[l] = -1;
}
int id = l + 1;
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
a[id] = A[i];
id++;
}
}
for (int i = 0; i < n; i++) {
if (i % 2 != 0) {
a[id] = A[i];
id++;
}
}
s = -1;
get(-1, 1, pw);
for (int i = 0; i < n - 1; i++) {
c.push_back(-1);
}
c.push_back(0);
for (int i = -1; i >= s; i--) {
X.push_back(lf[i]);
Y.push_back(rg[i]);
}
answer(c, X, Y);
}
# | 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... |