Submission #1309494

#TimeUsernameProblemLanguageResultExecution timeMemory
1309494SulACarnival (CEOI14_carnival)C++20
100 / 100
7 ms508 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/tree_policy.hpp> #include <ext/pb_ds/assoc_container.hpp> #define popcount __builtin_popcountll #define all(a) (a).begin(), (a).end() using namespace __gnu_pbds; using namespace std; using ordered_set = tree<int, null_type, less_equal<>, rb_tree_tag, tree_order_statistics_node_update>; int dist[150][150]; int query(int l, int r) { if (dist[l][r] > 0) return dist[l][r]; cout << r-l+1 << endl; for (int i = l; i <= r; i++) cout << 1+i << " "; cout << endl; cin >> dist[l][r]; return dist[l][r]; } int main() { cin.tie(nullptr)->ios::sync_with_stdio(false); int n; cin >> n; int a[n]; auto check = [&](int l, int i) { if (l == i) return false; // Does i equal anything from [l, i-1]? return query(l, i-1) == query(l, i); }; int unfound = 1; a[0] = unfound++; for (int i = 1; i < n; i++) { if (!check(0, i)) { a[i] = unfound++; continue; } int lo = 0, hi = i; while (hi-lo > 1) { int mid = (lo+hi)/2; if (check(mid, i)) lo = mid; else hi = mid; } a[i] = a[lo]; } // 1 2 1 3 2 cout << "0\n"; for (int x : a) cout << x << " "; }
#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...