Submission #421982

#TimeUsernameProblemLanguageResultExecution timeMemory
421982juancarlovieriZagonetka (COI18_zagonetka)C++17
27 / 100
3026 ms328 KiB
#include "bits/stdc++.h" using namespace std; #define kath ash int n; vector<int> p; bool query(vector <int> v) { vector <int> p (v.size()); for (size_t i = 0; i < v.size(); i++) { p[v[i]] = i; } cout << "query"; for (auto i : p) { cout << " " << (i + 1); } cout << endl; int ans; cin >> ans; return ans; } vector <int> g[111]; bool vis[111]; void dfs(int x) { vis[x] = true; for (auto i : g[x]) { if (!vis[i]) { dfs(i); } } } int mx[105], mn[105], in[105]; void dp(int x) { mx[x] = mn[x] = x; for (auto i : g[x]) { if (!vis[i]) dp(i); mx[x] = max(mx[x], mx[i]); mn[x] = min(mn[x], mn[i]); } } int main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); cin >> n; p.resize(n); for (int i = 0; i < n; i++) { int x; cin >> x; p[x - 1] = i; } for (int i = n - 1; i >= 0; i--) { memset(vis, 0, sizeof vis); for (int j = i + 1; j < n; j++) { if (vis[p[j]] == 0) { vector <int> temp; for (int k = 0; k < i; k++) { temp.emplace_back(p[k]); } for (int k = i + 1; k <= j; k++) { if (vis[p[k]] == 0) { temp.emplace_back(p[k]); } } temp.emplace_back(p[i]); for (int k = i + 1; k < n; k++) { if (vis[p[k]] == 0 && k <= j) continue; temp.emplace_back(p[k]); } if (query(temp) == 0) { g[p[i]].emplace_back(p[j]); dfs(p[j]); } } } } cout << "end" << endl; memset(vis, 0, sizeof vis); for (int i = 0; i < n; i++) { if (!vis[i]) { dp(i); } } typedef pair <int, int> pii; priority_queue <pii> P; priority_queue <pii, vector <pii>, greater <pii>> Q; vector <int> small, big; memset(in, 0, sizeof in); for (int i = 0; i < n; i++) { for (int j : g[i]) { ++in[j]; } } for (int i = 0; i < n; i++) { if (in[i] == 0) { Q.push(pii(mn[i], i)); P.push(pii(i, i)); } } while (!Q.empty()) { int x = Q.top().second; Q.pop(); small.push_back(x); for (int i : g[x]) { --in[i]; if (in[i] == 0) { Q.push(pii(mn[i], i)); } } } memset(in, 0, sizeof in); for (int i = 0; i < n; i++) { for (int j : g[i]) { ++in[j]; } } while (!P.empty()) { int x = P.top().second; P.pop(); big.push_back(x); for (int i : g[x]) { --in[i]; if (in[i] == 0) { P.push(pii(i, i)); } } } vector <int> ans(n); for (int i = 0; i < n; i++) { ans[small[i]] = i; } for (int i : ans) { cout << i + 1 << ' '; } cout << endl; for (int i = 0; i < n; i++) { ans[big[i]] = i; } for (int i : ans) { cout << i + 1 << ' '; } cout << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...