#include "doll.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
using pii=pair<int,int>;
const int lim=2e5+100;
vector<int>going[lim];
vector<int>x,y;
int build(vector<pii>need,int bit){
// cerr<<"here\n";
// for(auto[x,y]:need){
// cerr<<x<<' '<<y<<'\n';
// }
if(need.size()==1){
return need[0].second;
}
int ind=x.size();
x.pb(0);y.pb(0);
vector<pii>ok[2];
for(pii xx:need){
ok[(xx.first>>bit)&1].pb(xx);
}
x[ind]=build(ok[0],bit+1);
y[ind]=build(ok[1],bit+1);
return -ind-1;
}
void create_circuit(int m,vector<int>a){
int n=a.size();
for(int i=0;i<n;i++){
if(i!=n-1){
going[a[i]].pb(a[i+1]);
}else{
going[a[i]].pb(0);
}
}
vector<int>c(m+1);
c[0]=a[0];
for(int i=1;i<=m;i++){
if(!going[i].size())continue;
vector<pii>need;
for(int j=0;j<going[i].size();j++){
need.pb({j,going[i][j]});
}
c[i]=build(need,0);
}
answer(c,x,y);
}
// void create_circuit(int M, std::vector<int> A) {
// int N = A.size();
// std::vector<int> C(M + 1);
// C[0] = -1;
// for (int i = 1; i <= M; ++i) {
// C[i] = 1;
// }
// std::vector<int> X(N), Y(N);
// for (int k = 0; k < N; ++k) {
// X[k] = Y[k] = A[k];
// }
// 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... |