#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<ll, null_type, less_equal<ll>, rb_tree_tag,tree_order_statistics_node_update>
//#define endl '\n'
using ll = long long;
#define pb push_back
#define pF first
#define pS second
#define SP <<' '<<
#define all(x) (x).begin(), (x).end()
const ll mod7 = 1e9+7, mod9= 998244353, MAX_N = 10000000;
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll linkls[300], col[300];
ll query(ll n, ll l, ll r) {
cout << r-l+2 << " ";
cout << n << " ";
for (int i=l; i<r; i++) {
cout << i << " ";
} cout << r << endl;
ll x; cin>>x;
return x;
}
ll query(ll l, ll r) {
cout << r-l+1 << " ";
for (int i=l; i<r; i++) {
cout << i << " ";
} cout << r << endl;
ll x; cin>>x;
return x;
}
int main() {
//ios::sync_with_stdio(0); cin.tie(NULL);
ll n; cin>>n;
for (int i=1; i<=n; i++) {
ll l = i+1, r = n;
while (l <= r) {
ll mi = (l+r)/2;
bool equal = 0;
if (query(l , mi) == query(i, l, mi)) equal = 1;
if (equal) {
if (l == r) {
linkls[i] = l;
break;
}
r = mi;
}
else l = mi+1;
}
}
vector<bool> vis(n+1, 0);
ll color = 1;
for (int i=1; i<=n; i++) {
if (vis[i]) continue;
ll x = i;
while (x != 0) {
col[x] = color;
vis[x] = 1;
x = linkls[x];
}
color++;
}
cout << 0 << " ";
for (int i=1; i<n; i++) {
cout << col[i] << " ";
} cout << col[n] << endl;
}
| # | 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... |