#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |