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