Submission #96380

#TimeUsernameProblemLanguageResultExecution timeMemory
96380figter001The Big Prize (IOI17_prize)C++14
100 / 100
67 ms10284 KiB
#include "prize.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const int maxn = 2e5+50;

int ans,n;
map<int,vector<int>> mp[maxn];

void solve(int l,int r){
	if(l > r || ans != -1)return;
	int md = (l+r)/2;
	vector<int> res = ask(md);
	if(res[0] + res[1] == 0){
		ans = md;
		return;
	}
	int sum = res[0] + res[1];
	auto it = mp[sum].upper_bound(md);
	bool x=1,y=1;
	if(it != mp[sum].end()){
		if(it->second[0] == res[0])
			x = 0;
	}
	if(it != mp[sum].begin())
		it--;
	if(it != mp[sum].begin()){
		if(it->second[1] == res[1])
			y = 0;
	}
	mp[sum][md] = res;
	if(y)solve(l,md-1);
	if(x)solve(md+1,r);
}

int find_best(int N) {
	n = N;
	ans = -1;
	solve(0,n-1);
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...