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;
vector<pair<int,int> > s;
vector<int> a;
int n;
int step;
vector<int> posetio;
int klk=1;
int resi(int l,int r,int br=0,int bit=0){
if(l>n) return -1;
if(l==r){
posetio.push_back(br);
return br;
}
int ja=-klk;
klk++;
s.push_back({-1,-1});
int mid=l+(r-l)/2;
int levi=resi(l,mid,br+(1<<bit),bit+1);
int desni=resi(mid+1,r,br,bit+1);
s[-ja-1]={desni,levi};
return ja;
}
void create_circuit(int m, vector<int> _a) {
a=_a;
n=a.size();
step=1;
while(step<n+1) step*=2;
int c=resi(0,step-1);
vector<int> cc(m+1,c);
vector<int> x(s.size()),y(s.size());
sort(posetio.begin(),posetio.end());
assert(int(posetio.size())==n+1);
map<int,int> kurac;
for(int i=0;i<n+1;i++){
if(i==n) kurac[posetio[i]]=0;
else kurac[posetio[i]]=a[i];
}
for(int i=0;i<int(s.size());i++){
if(s[i].first<0) x[i]=s[i].first;
else x[i]=kurac[s[i].first];
if(s[i].second<0) y[i]=s[i].second;
else y[i]=kurac[s[i].second];
}
answer(cc,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... |