제출 #543019

#제출 시각아이디문제언어결과실행 시간메모리
543019MilosMilutinovic자동 인형 (IOI18_doll)C++14
100 / 100
884 ms14104 KiB
//implementation idea by TadijaSebez #include "doll.h" #include <bits/stdc++.h> #define pb push_back using namespace std; const int N=200050; const int M=2*N; int n,d,root,ls[M],rs[M],tsz,id[M],p[M]; bool was[M]; int val(int x){ x--; int ret=0; for(int i=0;i<25;i++)if(x>>i&1)ret+=(1<<(25-i)); return ret; } void Build(int&c,int ss,int se){ if(se<=d){c=root;return;} if(ss==se){c=-id[ss];return;} c=++tsz; int mid=ss+se>>1; Build(ls[c],ss,mid); Build(rs[c],mid+1,se); } void create_circuit(int M,vector<int> A){ A.pb(0); n=A.size(); int sz=1; while(sz<n)sz*=2; d=sz-n; vector<int> ids; for(int i=1;i<=sz;i++)ids.pb(i); sort(ids.begin(),ids.end(),[&](int i,int j){return val(i)<val(j);}); for(int i=d;i<sz;i++)was[ids[i]]=true,p[ids[i]]=i+1; for(int i=1,ptr=0;i<=sz;i++)if(was[i])id[p[i]]=A[ptr++]; Build(root,1,sz); vector<int> C,X,Y; for(int i=0;i<=M;i++)C.pb(-1); for(int i=1;i<=tsz;i++)X.pb(-ls[i]),Y.pb(-rs[i]); answer(C,X,Y); }

컴파일 시 표준 에러 (stderr) 메시지

doll.cpp: In function 'void Build(int&, int, int)':
doll.cpp:20:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   20 |  int mid=ss+se>>1;
      |          ~~^~~
#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...