#include "prize.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define mk make_pair
#define pb push_back
#define fr first
#define sc second
int max_loli;
int query(int l, int r, int pl, int pr) {
int ml = (l+r)/2 - 1, mr = ml + 1, pml = pr, pmr = max_loli;
while(mr <= r) {
vi rsp = ask(mr);
if(rsp[0] + rsp[1] == max_loli) {
pml = rsp[0] - (mr - ml - 1);
pmr = rsp[0];
mr++;
break;
}
if(rsp[0] + rsp[1] == 0) return mr;
mr++; pml--;
}
int ret = -1;
if(pl < pml and l <= ml) ret = query(l, ml, pl, pml);
if(pmr < pr and mr <= r and ret == -1) ret = query(mr, r, pmr, pr);
return ret;
}
mt19937 rng(time(0));
int rand(int a, int b) {
uniform_int_distribution<int> val(a,b);
return val(rng);
}
int find_best(int N) {
for(int i = 1; i <= 100; i++) {
int x = rand(0, N-1);
vi rsp = ask(x);
max_loli = max(max_loli, rsp[0] + rsp[1]);
if(rsp[0] + rsp[1] == 0) return x;
}
return query(0, N-1, 0, max_loli);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |