#include <bits/stdc++.h>
using namespace std;
#define print(l) for(auto i:l) cout<<i<<" ";cout<<endl;
#define input(t,l,n) vector<t>l(n);for(int i = 0;i<n;i++)cin>>l[i];
#define int long long
#define pb push_back
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define all(l) l.begin(),l.end()
#define pii pair<int,int>
#define fi first
#define se second
const int M = 1e9+7;
const int inf = 1e18;
int bp(int x, int y, int p){
int res = 1;
x = x % p;
while (y > 0) {
if (y & 1)
res = (res * x) % p;
y = y >> 1;
x = (x * x) % p;
}
return res;
}
int MI(int n, int p){
return bp(n, p - 2, p);
}
int mul(int x,int y, int p){
return x * 1ull * y % p;
}
int di(int x,int y, int p){
return mul(x, MI(y, p), p);
}
int n , m , k , q;
// string s;
map<pair<int,int>,int>qur;
// void update(int l,int r,int val){
// if(val){
// while(l <= r){
// if(qur[{l,r}] != 0){
// break;
// }
// qur[{l,r}] = 1;
// l++;
// r--;
// }
//
// }
// else{
// while(l>=1 and r<=n){
// if(qur[{l,r}] != 0){
// break;
// }
// qur[{l,r}] = 2;
// l--;
// r++;
// }
// }
// }
int ask(int l,int r){
if(qur[{l,r}] == 1){
return 1;
}
else if(qur[{l,r}] == 2){
return 0;
}
else{
cout<<"? "<<l<<" "<<r<<endl;
int re;
cin>>re;
qur[{l,r}] = re+(re == 0);
// update(l,r,re);
return re;
}
}
void solve(int testcase_number){
cin>>n;
int flen = 1;
// if l is odd
vector<int>odd;
for(int i = 1;i<=n;i+=2){
odd.pb(i);
}
// print(odd);
int l = 0;
int r = odd.size();
while(r-l >1){
int m = (l+r)/2;
int len = odd[m];
int f = 0;
int ans =0 ;
for(int i = 1;i+len-1<=n;i++){
ans = ask(i,i+len-1);
if(ans){
f = 1;
break;
}
}
if(f){
l = m;
}
else{
r = m;
}
}
if(l != -1) flen = max(flen,odd[l]);
// if l is even
vector<int>even = {1};
for(int i = 2;i<=n;i+=2){
even.pb(i);
}
l = 0;
r = even.size();
while(r-l > 1){
int m = (l+r)/2;
int len = even[m];
int f = 0;
int ans =0 ;
for(int i = 1;i+len-1<=n;i++){
ans = ask(i,i+len-1);
if(ans){
f = 1;
break;
}
}
if(f){
l = m;
}
else{
r = m;
}
}
if(l!= -1)flen = max(flen,even[l]);
cout<<"! "<<flen<<endl;
// nevenq
}
signed main(){
// ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
// cin.tie(0), cout.tie(0);
// cout << fixed<<setprecision(9);
int t = 1;
// cin>>t;
for(int i = 1;i<=t;i++){
solve(i);
}
}
| # | 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... |