Submission #1298510

#TimeUsernameProblemLanguageResultExecution timeMemory
1298510hssaan_arifMađioničar (COI22_madionicar)C++20
0 / 100
500 ms412 KiB
#include <bits/stdc++.h>
using namespace std;

// #define endl "\n"
#define pb push_back
#define int long long
#define fi first
#define se second

const int N = 3e5 + 5, M = 1e9 + 7, LG = 20;

int n , A[N] , x;

bool ch(int mid , bool o){
    if (!o){
        for (int i = 1 ; i<=n ; i++){
            if ((i-mid) >= 1 && (i+mid) <= n){
                cout << "? " << i-mid << " " << i+mid << endl;
                cin >> x;
                if (x){
                    return 1;
                }
            }
        }
        return 0;
    }else{
        for (int i = 1 ; i<n ; i++){
            if ((i-mid) >= 1 && (i+mid+1) <= n){
                cout << "? " << i-mid << " " << i+mid+1 << endl;
                cin >> x;
                if (x){
                    return 1;
                }
            }
        }
        return 0;
    }
    
}

void solve(){
    cin >> n;
    int l=1 , r = (n/2) + 1;
    while(l+1 < r){
        int mid = (l+r)>>1;
        if (ch(mid,0)){
            l = mid;
        }else{
            r = mid;
        }
    }
    int ans = 2*l+1;
    l=0 , r = (n/2) + 1;
    while(l+1 < r){
        int mid = (l+r)>>1;
        if (ch(mid,1)){
            l = mid;
        }else{
            r = mid;
        }
    }
    ans = max(ans , 2*l+2);
    cout <<"! "<< ans << endl;
}

signed main(){
    // freopen("" , "r" , stdin);
    // freopen("" , "w" , stdout);
    // cout << setprecision(30);
    // ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int ts = 1;
    // cin >> ts;
    while(ts--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...