제출 #1329023

#제출 시각아이디문제언어결과실행 시간메모리
1329023nathjessMađioničar (COI22_madionicar)C++20
13 / 100
496 ms1332 KiB
# include <bits/stdc++.h>
# define int long long
# define vi vector<int>
# define pb push_back
# define pii pair<int, int>
# define fi first
# define se second

using namespace std;

int n;
vi odd, even;

bool ask(int l, int r) {
    cout << "? " << l << " " << r << endl;
    int ret; cin >> ret;
    return ret;
}

void solve () {
    cin >> n;
    for(int i=1; i<=n; i++) {
        if(i%2==1) odd.pb(i);
        else even.pb(i);
    }
    int l=0, r=odd.size()-1, ret=0;
    while(l<=r) {
        int mid=(l+r)/2, sz=odd[mid], ok=0;
        for(int i=1; i<=(n-sz+1); i++) {
            if(ask(i, i+sz-1)) {
                ok=1;
                break;
            }
        }
        if(ok) l=mid+1, ret=mid;
        else r=mid-1;
    }
    int ans=odd[ret];
    l=0, r=even.size()-1, ret=-1;
    while(l<=r) {
        int mid=(l+r)/2, sz=even[mid], ok=0;
        for(int i=1; i<=(n-sz+1); i++) {
            if(ask(i, i+sz-1)) {
                ok=1;
                break;
            }
        }
        if(ok) l=mid+1, ret=mid;
        else r=mid-1;
    }
    if(ret!=-1) ans=max(ans, even[ret]);
    cout << "! " << ans << endl;
}
 
signed main() {
   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...