Submission #120380

#TimeUsernameProblemLanguageResultExecution timeMemory
120380songcMechanical Doll (IOI18_doll)C++14
100 / 100
206 ms11712 KiB
#include <bits/stdc++.h> #include "doll.h" using namespace std; typedef long long LL; typedef pair<int, int> pii; int N, M, B, S; int ID[808080], num; int L[202020], R[202020]; bool st[202020]; vector<int> A; void index(int id, int s, int e){ if (s == e || e <= B-N) return; ID[id] = ++S; int mid = (s+e)/2; index(id*2, s, mid); index(id*2+1, mid+1, e); } void f(int id, int s, int e){ if (e <= B-N){ L[ID[id/2]] = -1; return; } if (s == e) return; int mid = (s+e)/2; f(id*2, s, mid); f(id*2+1, mid+1, e); if (id & 1) R[ID[id/2]] = -ID[id]; else L[ID[id/2]] = -ID[id]; } void create_circuit(int m, std::vector<int> a){ a.push_back(0); N = a.size(), M = m, A = a; for (B=1; B<N; B<<=1); index(1, 1, B); f(1, 1, B); for (int i=0; i<N; i++){ int u=1; while (1){ if (!st[u]){ if (L[u] == 0){ L[u] = A[i]; st[u] = !st[u]; break; } else st[u] = !st[u], u=-L[u]; } else{ if (R[u] == 0){ R[u] = A[i]; st[u] = !st[u]; break; } else st[u] = !st[u], u=-R[u]; } } } vector<int> C(M+1, -1); vector<int> X, Y; for (int i=1; i<=S; i++){ X.push_back(L[i]); Y.push_back(R[i]); } answer(C, 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...