#include "doll.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
using pii=pair<int,int>;
const int lim=2e6+100;
vector<int>going[lim];
vector<int>x(lim,INT_MAX),y(lim,INT_MAX);
int last=0;
int build(vector<pii>need,int root){
if(need.size()==1){
if(need[0].second!=INT_MIN){
return need[0].second;
}
return root;
}
int ind=last++;
if(root==1)root=-ind-1;
vector<pii>ok0,ok1;
for(auto[xx,yy]:need){
if((xx)&1)ok1.pb({xx/2,yy});
else ok0.pb({xx/2,yy});
}
x[ind]=build(ok0,root);
y[ind]=build(ok1,root);
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]});
}
while(__builtin_popcount(need.size())!=1){
need.pb({INT_MIN,INT_MIN});
}
sort(need.begin(),need.end());
for(int j=0;j<need.size();j++){
need[j].first=j;
}
c[i]=build(need,1);
}
while(x.back()==INT_MAX){
x.pop_back();
y.pop_back();
}
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... |