//#pragma once
//#include "grader.cpp"
#include "prize.h"
#include <bits/stdc++.h>
using namespace std;
mt19937 mt(time(nullptr));
int sum,lamp,n,num=20,lf,rf;
void prec()
{
    vector<int>a;
    int h;
    for(int i=1; i<=10; i++)
    {
        h=mt()%n;
        a=(ask(h));
        sum=max(sum,a[0]+a[1]);
    }
}
void rec(int l,int r,int br,int exl,int exr)
{
    if(lamp||br<=0||r<lf||l>rf)return;
    int mid=(l+r)/2,ad=1;
    vector<int>a;
    if(br+exl+exr!=n-sum)
    {
        exit(0);
    }
    while(true)
    {
        num++;
        if(num>=9995)
        {
            lamp=20000000;
            return;
        }
        a=ask(mid-1);
        if(a[0]+a[1]==0)
        {
            lamp=mid;
            return;
        }
        if(a[0]==0)lf=mid+1;
        if(a[1]==0)rf=mid-1;
        if(a[0]+a[1]==sum)break;
        mid+=ad;
        if(mid>r||mid>rf)
        {
            mid=(l+r)/2-1;
            ad=-1;
        }
        if(mid<l||mid<lf)return;
    }
    int dist=abs(mid-(l+r)/2);
    if(mid>=(l+r)/2)
    {
        rec(mid+1,r,a[1]-exr,a[0],exr);
        rec(l,(l+r)/2-1,a[0]-exl-dist,exl,a[1]+dist);
    }
    else
    {
        rec(l,mid-1,a[0]-exl,exl,a[1]);
    }
}
int find_best(int N)
{
    n=N;
    rf=N;
    prec();
    rec(1,n,n-sum,0,0);
    return lamp-1;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |