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;
int idx[400001], dir[400001], cnt;
vector<int> c, x, y;
void del(int n, int k){
if(n>=k) return;
del(n*2, k); del(n*2+1, k);
if(idx[n*2]==-1 && idx[n*2+1]==-1) idx[n]=-1;
}
int find(int n, int k){
if(n>=k) return n;
if(!dir[n]){
dir[n]=1;
return find(n*2, k);
}
else{
dir[n]=0;
return find(n*2+1, k);
}
}
void num(int n, int k){
if(n>=k || idx[n]) return;
idx[n]=--cnt;
num(n*2, k); num(n*2+1, k);
}
void ans(int n, int k){
if(n>=k || (n!=1 && idx[n]==-1)) return;
x[-idx[n]-1]=idx[n*2]; y[-idx[n]-1]=idx[n*2+1];
ans(n*2, k); ans(n*2+1, k);
}
void create_circuit(int m, vector<int> A){
A.push_back(0);
int n=A.size(), k=1;
while(k<n) k*=2;
for(int i=k+n;i<k+k;i++) idx[i]=-1;
del(1, k);
for(int i=0;i<n;i++){
int a=find(1, k);
while(a>=k+n) a=find(1, k);
idx[a]=A[i];
}
num(1, k);
for(int i=0;i<=m;i++) c.push_back(-1);
x.resize(-cnt); y.resize(-cnt);
ans(1, 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... |