This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
vector<int> ask(int i);/*{
cout << i << '\n';
vector<int> a(2);
cin >> a[0] >> a[1];
return a;
}*/
int clol, ans;
bool wegood = false;
void solve(int l, int r, int lpl, int lpr){
int m = l+r>>1;
auto a = ask(m);
if(a[0]+a[1] == 0) {
ans = m;
wegood = true;
return;
}
if(a[0]+a[1] == clol){
if(a[0] > lpl && l < m) solve(l, m-1, lpl, a[1]);
if(wegood) return;
if(a[1] > lpr && r > m) solve(m+1, r, a[0], lpr);
return;
}
int L = m-1, R = m+1;
while(R < r){
auto a = ask(R);
if(a[0]+a[1]==0){
ans = R;
wegood = true;
return;
}
if(a[0]+a[1]==clol){
if(a[1] > lpr && R < r) solve(R+1, r, a[0], lpr);
if(wegood) return;
break;
}
R++;
}
while(L > l){
auto a = ask(L);
if(a[0]+a[1]==0){
ans = L;
wegood = true;
return;
}
if(a[0]+a[1]==clol){
if(a[0] > lpl && L > l) solve(l, L-1, lpl, a[1]);
if(wegood) return;
break;
}
L--;
}
}
int find_best(int n){
pair<int, pair<int, int>> lol = {0,{0, 0}};
for(int i = 0;i < 475;i++){
auto a = ask(i);
if(a[0]+a[1] == 0) return i;
lol = max(lol, make_pair(a[0]+a[1], make_pair(a[0], i)));
}
clol = lol.first;
solve(lol.second.second+1, n-1, lol.second.first, 0);
return ans;
}/*
int main(){
int n;
cin >> n;
cout << find_best(n) << '\n';
}*/
Compilation message (stderr)
prize.cpp: In function 'void solve(int, int, int, int)':
prize.cpp:12:11: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
12 | int m = l+r>>1;
| ~^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |