#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll,ll>
#define fi first
#define se second
const ll N=1e5+5,MOD=1e9+7,INF=1e18;
ll a[N];
bool q(int l,int r){
cout<<"? "<<l<<' '<<r<<endl;
int ret;cin>>ret;
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;cin>>n;
int len=1,ans=1;
for(int i=1; i<=n; i++)a[i]=i;
for(int i=2; i<=n; i++){
if(q(i-1,i)){
a[i]=a[i-1];
len++;
}
else len=1;
ans=max(len,ans);
}
for(int i=2; i<=n; i++){
if(a[i]==a[i-1])continue;
int l=i-1,r=i;
while(a[r+1]==a[r] && r+1<=n)r++;
if(r+1<=n)r++;
while(1){
while(l-1>=1 && r+1<=n ){
if(a[l]!=a[l-1] || a[r]!=a[r+1])break;
l--;
r++;
}
if(q(l,r)){
ans=max(ans,r-l+1);
l--;
r++;
if(l<1 || r>n)break;
}
else break;
}
}
cout<<"! "<<ans<<endl;
}
//aabbcc
| # | 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... |