This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "doll.h"
#include "bits/stdc++.h"
using namespace std;
const int N = 5e6;
vector<int> x(N), y(N);
int idx = 0, n, cc[N];
int NN;
int build(int l, int r) {
if(NN - 1 - r >= n) return -1;
if(l == r) return 1;
int mid = l + r >> 1;
int i = idx++;
x[i] = build(l, mid);
y[i] = build(mid + 1, r);
return -i - 1;
}
void create_circuit(int m, vector<int> a) {
a.push_back(0);
n = a.size();
vector<int> c(m + 1, -1);
NN = n; while(__builtin_popcount(NN) != 1) ++NN;
build(0, NN - 1);
x.resize(idx);
y.resize(idx);
for(int i: a) {
int node = 0;
while(true) {
int nxt = (cc[node] ? y[node] : x[node]);
if(nxt == 1) {
if(cc[node] == 1) y[node] = i;
else x[node] = i;
cc[node] ^= 1;
break;
}
cc[node] ^= 1;
node = -nxt - 1;
}
}
answer(c, x, y);
}
Compilation message (stderr)
doll.cpp: In function 'int build(int, int)':
doll.cpp:11:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
11 | int mid = l + r >> 1;
| ~~^~~
# | 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... |