Submission #1177361

#TimeUsernameProblemLanguageResultExecution timeMemory
1177361emad234The Big Prize (IOI17_prize)C++20
20 / 100
26 ms5352 KiB
#include "prize.h"
#include <bits/stdc++.h>
#define ll long long
#define F first
#define S second
#define pii pair<int, int>
const int mod = 1e9 + 7;
const int mxN = 2e3 + 5;
const int mnN = 1e9 * -1;
using namespace std;
vector<vector<int>> res;
int find_best(int n) {
	res.resize(n);
	if (n <= 5000)
	{
		for(int i = 0;i < n;i++){
			res[i] = ask(i);
			if(res[i][0] + res[i][1] == 0) return i;
		}
	}
	int mx = 0;
	for(int tmp = 0; tmp < 20;tmp++){
		int md = rand() % n;
		if(res[md].empty()) res[md] = ask(md);
		mx = max(res[md][0] + res[md][1], mx);
	}
	int s = 0,e = n - 1;
	while(1){
		if(res[s].empty()) res[s] = ask(s);
		if(res[s][0] + res[s][1] != mx){
			if(res[s][0] + res[s][1] == 0) return s;
			s++;
			continue;
		}
		int num = res[s][0];
		int l = s - 1,r = e,md;
		while(l < r){
			md = (l + r + 1) / 2;
			if(res[md].empty())res[md] = ask(md);
			if(res[md][0] + res[md][1] == 0) return md;
			if(res[md][0] + res[md][1] != mx || res[md][0] != num){

				r = md - 1;
			}else l = md;
		}
		l++;
		if(res[l].empty()) res[l] = ask(l);
		if (res[l][0] + res[l][1] == 0) return l;
		s = l + 1;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...