#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF = 1e18;
const int MOD = 1e9+7;
const int MAXN = 2e5;
int n, m;
int arr[MAXN+5];
bool query(int l, int r){
cout << "? " << l << ' ' << r << endl;
int jury; cin >> jury;
return jury;
}
bool cek(int target){
for(int i = 1; i <= n - target + 1; i++){
if(query(i, i + target - 1)) return 1;
}
return 0;
}
void solve(){
cin >> n;
int ans = 0;
int left = 1, right = n;
int mid;
while(left <= right){
mid = (left + right) / 2;
int target = mid;
if(target % 2 == 0) target--;
if(cek(target)){
ans = max(target, ans);
left = mid + 1;
}else{
right = mid - 1;
}
}
left = 2, right = n;
mid = 0;
while(left <= right){
mid = (left + right) / 2;
int target = mid;
if(target % 2 == 1) target--;
if(cek(target)){
ans = max(target, ans);
left = mid + 1;
}else{
right = mid - 1;
}
}
cout << "! " << ans << endl;
}
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int tc = 1;
// cin >> tc;
while(tc--){
solve();
}
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... |