Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- vector<int> ask(vector<int> v) {
- cout << "? " << v.size() << " ";
- for (int x : v) cout << x << ' ';
- cout << endl;
- vector<int> res;
- int sz;
- cin >> sz;
- while (sz--) {
- int x;
- cin >> x;
- res.push_back(x);
- }
- return res;
- }
- int main() {
- // ios::sync_with_stdio(false); cin.tie(0);
- int N, M, Q;
- cin >> N >> M >> Q;
- // if (N+M <= Q) {
- // for (int i = 1; i <= N+M; ++i) {
- // vector<int> res = ask({i});
- // if (res.empty() || res.size() > 1) {
- // cout << "! " << i << endl;
- // return 0;
- // }
- // }
- // } else {
- vector<int> nodes, res;
- for (int i = 1; i <= N+M; ++i) {
- nodes.push_back(i);
- }
- res = ask(nodes);
- if (res.size() < N+M) {
- vector<bool> had(N+M+1, false);
- for (int x : res) {
- had[x] = true;
- }
- for (int i = 1; i <= N+M; ++i) {
- if (had[i] == false) {
- cout << i << endl;
- return 0;
- }
- }
- }
- int L1 = 1, R1 = N, L2 = N+1, R2 = N+M, m1, m2;
- while (L1+1 <= R1 || L2+1 <= R2) {
- nodes.clear();
- res.clear();
- // cout << "L1=" << L1 << " R1=" << R1 << " L2=" << L2 << " R2=" << R2 << endl;
- if (L1+1 <= R1) {
- m1 = (L1 + R1) / 2;
- for (int i = L1; i <= m1; ++i) {
- nodes.push_back(i);
- }
- }
- if (L2+1 <= R2) {
- m2 = (L2 + R2) / 2;
- for (int i = L2; i <= m2; ++i) {
- nodes.push_back(i);
- }
- }
- res = ask(nodes);
- vector<int> res1, res2;
- for (int x : res) {
- if (x <= N) {
- res2.push_back(x);
- } else {
- res1.push_back(x);
- }
- }
- if (L1+1 <= R1) {
- if (res1.size() != m1-L1+1) {
- R1 = m1;
- // cout << "(1) " << res1.size() << " > " << m1-L1+1 << " ==> R1=" << m1 << endl;
- } else {
- L1 = m1+1;
- // cout << "(1) " << res1.size() << " = " << m1-L1+1 << " ==> L1=" << m1+1 << endl;
- }
- }
- if (L2+1 <= R2) {
- if (res2.size() != m2-L2+1) {
- R2 = m2;
- } else {
- L2 = m2+1;
- }
- }
- }
- cout << "! ";
- if (L1 == R1) {
- cout << L1 << endl;
- } else {
- cout << L2 << endl;
- }
- // }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement