Submission #978130

#TimeUsernameProblemLanguageResultExecution timeMemory
978130FEDIKUSMechanical Doll (IOI18_doll)C++17
100 / 100
159 ms23988 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...