Submission #1222053

#TimeUsernameProblemLanguageResultExecution timeMemory
1222053rythm_of_knightLibrary (JOI18_library)C++17
100 / 100
64 ms532 KiB
#include "library.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; void Solve(int n) { vector <int> st(n); vector <deque <int>> cur; int now = 0; for (int i = 0; i < n; i++) { st[i] = 1; int bec = Query(st); if (bec > now) { cur.push_back({i}); now = bec; } else if (bec == now) { int l = -1, r = cur.size(); while (l + 1 < r) { int m = l + r >> 1; vector <int> tmp(n); for (int j = 0; j <= m; j++) for (int k : cur[j]) tmp[k] = 1; tmp[i] = 1; if (Query(tmp) == m + 1) r = m; else l = m; } vector <int> tmp(n); tmp[i] = tmp[cur[r].front()] = 1; if (Query(tmp) == 1) { cur[r].push_front(i); } else { cur[r].push_back(i); } } else { int l = -1, r = cur.size(); while (l + 1 < r) { int m = l + r >> 1; vector <int> tmp(n); for (int j = 0; j <= m; j++) for (int k : cur[j]) tmp[k] = 1; tmp[i] = 1; if (Query(tmp) <= m + 1) r = m; else l = m; } int lef = r; l = lef, r = cur.size(); while (l + 1 < r) { int m = l + r >> 1; vector <int> tmp(n); for (int j = 0; j <= m; j++) for (int k : cur[j]) tmp[k] = 1; tmp[i] = 1; if (Query(tmp) <= m) r = m; else l = m; } int rig = r; deque <int> nw; vector <int> tmp(n); tmp[i] = tmp[cur[lef].front()] = 1; if (Query(tmp) == 1) { while (!cur[lef].empty()) { nw.push_back(cur[lef].back()); cur[lef].pop_back(); } swap(cur[lef], nw); } cur[lef].push_back(i); tmp = vector <int> (n, 0); tmp[i] = tmp[cur[rig].back()] = 1; if (Query(tmp) == 1) { while (!cur[rig].empty()) { cur[lef].push_back(cur[rig].back()); cur[rig].pop_back(); } } else { while (!cur[rig].empty()) { cur[lef].push_back(cur[rig].front()); cur[rig].pop_front(); } } cur.erase(cur.begin() + rig); now = bec; } } vector <int> res; while (!cur[0].empty()) { res.push_back(cur[0].back() + 1); cur[0].pop_back(); } Answer(res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...