Submission #43988

#TimeUsernameProblemLanguageResultExecution timeMemory
43988ruhanhabib39Library (JOI18_library)C++17
19 / 100
497 ms1860 KiB
#include <cstdio> #include <vector> #include <algorithm> #include <map> #include "library.h" using namespace std; namespace { int N; const int MAXN = 1000; vector<int> G[MAXN + 10]; vector<int> init(int l, int r, int i = -1) { vector<int> v(N, 0); fill(v.begin() + l, v.begin() + r + 1, 1); if(i != -1) v[i] = 1; return v; } map<tuple<int,int,int>,int> cnt; int ask(int l, int r, int i = -1) { int& res = cnt[{l,r,i}]; if(res == 0) res = Query(init(l, r, i)); return res; } void work_left(int i, int l, int r) { if(l == r) { G[i].push_back(l); G[l].push_back(i); return; } int m = (l + r) / 2; if(ask(l, m) >= ask(l, m, i)) { work_left(i, l, m); } else { work_left(i, m+1, r); } } void work_right(int i, int l, int r) { if(l == r) { G[i].push_back(l); G[l].push_back(i); return; } int m = (l + r) / 2; if(ask(m+1, r) >= ask(m+1, r, i)) { work_right(i, m+1, r); } else { work_right(i, l, m); } } }; void Solve(int N_) { N = N_; for(int i = 1; i < N; i++) { if(ask(0, i-1) >= ask(0, i)) { work_left(i, 0, i-1); work_right(i, 0, i-1); } } for(int i = 0; i < N; i++) { G[i].erase(unique(G[i].begin(), G[i].end()), G[i].end()); } vector<int> res; res.reserve(N); int u = 0, p = -1; while(G[u].size() > 1) u++; while((int)res.size() < N) { res.push_back(u+1); for(int v : G[u]) { if(v != p) { p = u; u = v; break; } } } Answer(res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...