#include<bits/stdc++.h>
#include "prize.h"
using namespace std;
int find_best(int n) {
vector<vector<int>>cnt(n, vector<int>(2, -1));
vector<int>used;
auto id = [&] (int i){
if(cnt[i][0] != -1){
return cnt[i];
}
used.emplace_back(i);
return cnt[i] = ask(i);
};
auto sum = [&] (int i){
return id(i)[0] + id(i)[1];
};
auto same = [&] (int i, int j){
return sum(i) == sum(j);
};
int ans = -1;
if(sum(0) == 0){
ans = 0;
}
else if(sum(n - 1) == 0){
ans = n - 1;
}
else{
function<void(int, int)>solve;
solve = [&] (int l, int r){
if(l > r || ans != -1 || (same(l - 1, r + 1) && id(r + 1)[0] - id(l - 1)[0] == 0)){
return;
}
int m = (l + r) >> 1;
if(sum(m) == 0){
ans = m;
}
bool left = bool(l < m), right = bool(r > m);
for(int& x : used){
if(x <= l && same(x, m) && id(m)[0] - id(x)[0] == 0){
left = false;
}
if(x >= r && same(m, x) && id(m)[1] - id(x)[1] == 0){
right = false;
}
if(!left && !right){
break;
}
}
if(left){
solve(l, m - 1);
}
if(right){
solve(m + 1, r);
}
};
solve(1, n - 2);
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |