#include "prize.h"
#include <bits/stdc++.h>
#define ii pair<int, int>
#define fi first
#define se second
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
using ll = long long;
const ll mod=1e9+7;
const int nx=2e5+5;
int base;
// vector<int> ask(int i)
// {
// }
int solve(int l, int r, int cnt, int le, int ri)
{
    if(l>r || !cnt) return -1;
    int mid=(l+r)>>1;
    vector<int> tmp=ask(mid);
    if(tmp[0]+tmp[1]==0) return mid;
    if(tmp[0]+tmp[1]==base) return max(solve(l, mid-1, cnt-(tmp[1]-ri), le, tmp[1]), solve(mid+1, r, cnt-(tmp[0]-le), tmp[0], ri));
    vector<int> L={0, 0}, R={0, 0};
    int pl=mid-1, pr=mid+1;
    while(pl>=l)
    {
        L=ask(pl);
        if(L[0]+L[1]==0) return pl;
        if(L[0]+L[1]==base) break;
        pl--;
    }
    while(pr<=r)
    {
        R=ask(pr);
        if(R[0]+R[1]==0) return pr;
        if(R[0]+R[1]==base) break;
        pr++;
    }
    return max(solve(l, pl-1, cnt-(L[1]-ri), le, L[1]), solve(pr+1, r, cnt-(R[0]-le), R[0], ri));
}
int find_best(int n)
{
    base=0;
    for(int i = 0; i < min(500, n); i++)
    {
        vector<int> tmp=ask(i);
        base=max(base, tmp[0]+tmp[1]);
        if(base>=100) break;
    }
    return solve(0, n-1, base, 0, 0);
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |