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 "prize.h"
#include <bits/stdc++.h>
 
typedef int ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
 
using namespace std;
map<ll, vector<ll>> cache;
vector<ll> query(int n){
	if (cache.count(n)) return cache[n];
	else return cache[n] = ask(n);
}
int find_best(int n) {
	cache.clear();
	vector<ll> stuff(n);
	FOR(i,0,n) stuff[i] = i;
	
	vector<ll> found;
	ll ans = -1;
	while (ans == -1){
		ll lo = 0;
		ll hi = stuff.size()-1;
		bool skip = false;
		while (lo < hi){
			cout << lo << " " << hi << endl;
			ll mid = (lo+hi)/2;
			vector<ll> sus = query(stuff[mid]);
			if (sus[0] + sus[1] < 500){
					
				if (sus[0]+sus[1]==0) return stuff[mid];
				found.push_back(stuff[mid]);
				stuff.erase(stuff.begin()+mid);
				skip = true;
				break;
			}else{
				sort(found.begin(), found.end());
				ll idk = upper_bound(found.begin(), found.end(), stuff[mid]) - found.begin();
				if (idk < sus[0]){
					hi = mid;
				}else{
					lo = mid+1;
				}
			}
		}
		if (skip) continue;
		cout << lo << endl;
		vector<ll> sus = query(lo);
		if (sus[0]+sus[1]==0) return stuff[lo];
		found.push_back(stuff[lo]);
		stuff.erase(stuff.begin()+lo);
	}
	return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |