이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "doll.h"
#include <bits/stdc++.h>
using namespace std;
void debug_out() {cerr<<endl;}
template <typename Head, typename... Tail>
void debug_out(Head _H, Tail... _T) {cerr<<" "<<to_string(_H);debug_out(_T...);}
#define debug(...) cerr<<"["<<#__VA_ARGS__<<"]:",debug_out(__VA_ARGS__)
const int MAXN = 400005;
const int inf=1000000500ll;
const int MOD = (int)1e9 + 7;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef pair<int,int> pi;
int k;
int n;
int msb(unsigned int n){
return 1<<(32-__builtin_clz(n));
}
int cur=-1;
int X[MAXN], Y[MAXN], C[MAXN];
bool state[MAXN];
int I[MAXN];
int lim;
int dnc(int st, int en){
int mi=(st+en)/2;
int idx=cur--;
if(st+1==en){
if(!(st>lim)){
X[-idx]=-1;
} else{
}
return idx;
} else{
if(mi>lim){
X[-idx]=dnc(st,mi);
} else{
X[-idx]=-1;
}
Y[-idx]=dnc(mi+1,en);
return idx;
}
}
void trav(int x, int next){
if(state[-x]==0){
state[-x]=!state[-x];
if(X[-x]){
trav(X[-x],next);
} else{
X[-x]=next;
}
} else{
state[-x]=!state[-x];
if(Y[-x]){
trav(Y[-x],next);
} else{
Y[-x]=next;
}
}
}
void create_circuit(int M, vector<int> A) {
n=A.size();
k=msb(n);
lim=k-n-1;
dnc(0,k-1);
C[0]=-1; // go to the first thing that i need to go
for(int i=0;i<n;i++){
C[A[i]]=-1;
if(i==n-1)trav(-1,0);
else trav(-1,A[i+1]);
}
vector<int> AA,AB,AC;
AA=vector<int>(M+1,-1);
AA[0]=A[0];
int S=-cur;--S;
AB=vector<int>(S);AC=vector<int>(S);
for(int i=0;i<S;i++){
AB[i]=X[i+1];
AC[i]=Y[i+1];
}
answer(AA,AB,AC);
}
# | 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... |