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;
#define rep(i , j , k) for(int i = j; i < (int)k; i++)
#define pb push_back
#define all(x) x.begin(),x.end()
typedef vector<int> vi;
const int N = 2e5 + 10;
vi C , X ,Y, nx[N];
int n, cnt = 1;
inline int inve(int sz , int l) {
int res = 0;
rep(i , 0 , sz)
if (l & (1 << i))
res ^= (1 << (sz - 1 - i));
return res;
}
int build(int root, int lvl , int &g, int st = 0) {
if ((g >> lvl) & 1) {
g -= (1 << lvl);
return root;
}
if (lvl == 0) return -(N + st);
int me = cnt++;
X.pb(0);
Y.pb(0);
X[me - 1] = -build(root , lvl - 1, g , st);
Y[me - 1] = -build(root , lvl - 1, g , st + (1 << (lvl - 1)));
return me;
}
void build(vi vec) {
int z = 0;
while ((1 << z) < (int)vec.size()) z++;
int st = cnt;
int g = (1 << z) - vec.size();
build(cnt , z , g);
vi k;
rep(i , st - 1 , cnt - 1) {
if (X[i] >= N) k.pb(X[i] - N);
if (Y[i] >= N) k.pb(Y[i] - N);
}
auto cmp = [&](int a, int b) {
return inve(z , a) < inve(z , b);
};
sort(all(k) , cmp);
map<int , int> mp;
rep(i , 0 , k.size())
mp[k[i]] = i;
rep(i , st - 1, cnt - 1) {
if (X[i] >= N) X[i] = vec[mp[X[i] - N]];
if (Y[i] >= N) Y[i] = vec[mp[Y[i] - N]];
}
}
void create_circuit(int M, vi A) {
n = A.size();
A.pb(0);
rep(i , 0 , n)
nx[A[i]].pb(A[i + 1]);
C.resize(M + 1);
C[0] = A[0];
rep(i , 1 , M + 1) {
if (nx[i].empty())
C[i] = 0;
else if (nx[i].size() == 1) {
C[i] = nx[i][0];
}
else {
C[i] = -cnt;
build(nx[i]);
}
}
answer(C , X , Y);
return;
}
# | 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... |