This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for (int i = (a); i <= (b); i++)
#define repa(i,a,b) for (int i = (a); i >= (b); i--)
#define lli long long int
#define debug(a) cout << #a << " = " << a << endl
#define debugsl(a) cout << #a << " = " << a << ", "
lli n,ini,fin,start,mitad,n2,res,dir;
stack<lli> pila;
bool query(lli a) {
    cout << "? " << a << endl;
    cin >> a;
    if (a == 1) return true;
    else return false;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin >> n;
    ini = 1;
    fin = n-1;
    start = n;
    n2 = n/2;
    while (ini <= fin) {
        mitad = (ini+fin)/2;
        pila.push(mitad);
        ini = mitad+1;
    }
    while(!pila.empty()) {
        if (start > n2) start -= pila.top();
        else start += pila.top();
        pila.pop();
    }
    bool x = query(start);
    ini = 1;
    fin = n-1;
    res = 0;
    if (start > n2) dir = -1;
    else dir = 1;
    while (ini <= fin) {
        mitad = (ini+fin)/2;
        start += mitad*dir;
        dir *= -1;
        if (query(start)) fin = mitad - 1;
        else {
            res =  mitad;
            ini = mitad+1;
        }
    }
    cout << "= " << res+1;
}
Compilation message (stderr)
Colors.cpp: In function 'int main()':
Colors.cpp:43:10: warning: unused variable 'x' [-Wunused-variable]
   43 |     bool x = query(start);
      |          ^| # | 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... |