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>
#include "prize.h"
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define fi first
#define se second
#define mp make_pair
map<int,pii> res;
pii get(int x){
if(res.count(x)) return res[x];
vector<int> g = ask(x);
res[x] = mp(g[0], g[1]);
return mp(g[0],g[1]);
}
int low = 0;
int n;
int solve(int li, int ri, int know){
if(li > ri || know == 0) return -1;
pii ash = get(li);
if(ash.fi + ash.se == 0) return li;
if(li == ri) return -1;
int mid = (li + ri + 1) / 2;
pii qad = get(mid);
if(qad.fi + qad.se == 0) return mid;
if(qad.fi + qad.se == low){
int fa = solve(li, mid - 1, ash.se - qad.se);
if(fa != -1) return fa;
int fb = solve(mid, ri, know - (ash.se - qad.se));
return fb;
}
int cic = know;
int nw = mid;
int inb = 0;
while(nw <= ri){
qad = get(nw);
if(qad.fi + qad.se == 0) return nw;
if(qad.fi + qad.se < low){
nw ++ ;
inb ++ ;
}
else{
break;
}
}
int fa = solve(li, mid - 1,ash.se - qad.se - inb);
if(fa != -1) return fa;
return solve(nw, ri, know - (ash.se - qad.se));
}
int find_best(int _n) {
n = _n;
pii cur;
for(int i = 0 ; i < min(n,500); i ++ ){
cur = get(i);
if(cur.fi + cur.se == 0)
return i;
low = max(low, cur.fi + cur.se);
}
int lef = 0, rig = n - 1;
while(1){
pii cc = get(lef);
if(cc.fi + cc.se == 0) return lef;
if(cc.fi + cc.se != low)
lef ++ ;
else
break;
}
cur = get(lef);
return solve(lef, n - 1, cur.se);
}
Compilation message (stderr)
prize.cpp: In function 'int solve(int, int, int)':
prize.cpp:38:9: warning: unused variable 'cic' [-Wunused-variable]
38 | int cic = know;
| ^~~
prize.cpp: In function 'int find_best(int)':
prize.cpp:66:18: warning: unused variable 'rig' [-Wunused-variable]
66 | int lef = 0, rig = n - 1;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |