#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll, bool>vis;
bool ask(ll x){
	cout << "? " << x << endl;
	vis[x] = true;
	int k;
	cin >> k;
	return k == 1;
}
ll n;
namespace sub1{
	void solve(){
		ask(1);
		for(int i = n, cur = 1; i > 1; i--){
			if((n ^ i ^ 1) & 1){
				if(!ask(cur += i - 1)){
					return void(cout << "= " << i << endl); 
				}
			}
			else if(!ask(cur -= i - 1)){
				return void(cout << "= " << i << endl);
			}
		}
		cout << "= 1" << endl;
	}
}
namespace sub23{
	void solve(){
		int low = 1, high = n - 1, ans = 1;
		bool parity = true;
		while(low <= high){
			int mid = (low + high) >> 1;
			for(int i = n - mid; i > 0; i--){
				if(!vis[i] && !vis[i + mid]){
					ask(i);
					if(!ask(i + mid)){
						low = ans = mid + 1;
					}
					else{
						high = mid - 1;
					}
					break;
				}
			}
		}
		cout << "= " << ans << endl;
	}
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n;
	if(n <= 64){
		sub1::solve();
	}
	else if(n <= 1000000000){
		sub23::solve();
	}
}
| # | 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... |