이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//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 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... |