이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
///
/// Oh? You're approaching me?
///
#include <bits/stdc++.h>
#define Loop(x,l,r) for(ll x = ll(l); x < ll(r); ++x)
#define LoopR(x,l,r) for(ll x = ll(r)-1; x >= ll(l); --x)
#define Kill(x) exit((cout << (x) << '\n', 0))
typedef long long ll;
typedef std::pair<int,int> pii;
typedef std::pair<ll,ll> pll;
using namespace std;
#include "doll.h"
const int N = 1e6+10;
int n, lg, cnt;
int x[N], y[N];
bool sd[N];
vector<int> C;
//void answer(vector<int> C, vector<int> X, vector<int> Y){
// for(int x : C) cout << x << ' '; cout << '\n';
// for(int x : X) cout << x << ' '; cout << '\n';
// for(int x : Y) cout << x << ' '; cout << '\n';
//}
int make(int sz){
if(sz==1) return 0;
int i = cnt++;
x[i] = make(sz/2);
y[i] = make(sz/2);
return ~i;
}
int& find(int v=0){
return (sd[v]=!sd[v])? (x[v]?find(~x[v]):x[v]): (y[v]?find(~y[v]):y[v]);
}
void create_circuit(int m, vector<int> a)
{
n = a.size();
C.resize(m+1);
C[0] = a[0];
if(n==1){
answer(C, {}, {});
return;
}
Loop(i,1,m+1) C[i] = -1;
for(int z=1; z<n; z*=2) ++lg;
Loop(i,0,lg-1) y[i]=~(i+1);
cnt = lg;
for(int i=0,z=1<<(lg-1); z; ++i,z/=2){
x[i] = (n-1)&z? make(z): -1;
}
Loop(i,1,n) find() = a[i];
auto X = vector<int>(x,x+cnt);
auto Y = vector<int>(y,y+cnt);
answer(C,X,Y);
}
//int main(){
// create_circuit(10, {5});
//}
# | 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... |