#include <bits/stdc++.h>
using namespace std;
long long n;
long long rez = 1, ans;
vector <long long> solve (long long x){
	vector <long long> drugi;
	if (x == 2){
		drugi.push_back(1);
		drugi.push_back(2);
		return drugi;
	}
	drugi = solve((x + 1) / 2);
	int vel = drugi.size();
	if (drugi[vel - 1] < drugi[vel - 2]) drugi.push_back(drugi[vel - 1] + (x + 1) / 2);
	else{
		long long zadnji = drugi[vel - 1];
		drugi.pop_back();
		drugi.push_back(zadnji + (x + 1) / 2);
		drugi.push_back(zadnji);
		for (int i = 0; i < vel - 1; i++) drugi[i] += (x + 1) / 2;
	}
	return drugi;
}
int main (void){
	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	cin >> n;
	vector <long long> v = solve(n);
	reverse(v.begin(), v.end());
	cout << "? " <<  v[0] << endl;
	cin >> ans;
	for (int i = 1; i < v.size(); i++){
		cout << "? " << v[i] << endl;
		cin >> ans;
		if (ans == 0){
			rez += (n + 1) / 2;
			if (v[i - 1] > v[i]) for (int j = i + 1; j < v.size(); j+=2) v[j] += (n + 1) / 2;
			else for (int j = i + 1; j < v.size(); j+=2) v[j] -= (n + 1) / 2;
		}
		n = (n + 1) / 2;
	}
	cout << "= " << rez << endl;
	
	return 0;
}
| # | 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... |