Submission #410419

#TimeUsernameProblemLanguageResultExecution timeMemory
410419Antekb커다란 상품 (IOI17_prize)C++14
95.31 / 100
84 ms5440 KiB
#include "prize.h"
#include<bits/stdc++.h>
using namespace std;
const int N=(1<<19);
set<int> S;
vector<vector<int>> V;
vector<int> ask2(int i){
	if(S.find(i)==S.end())V[i]=ask(i), S.insert(i);
	return V[i];
}
int find_best(int n) {
	V.resize(n);
	map<int, int> M;
	for(int i = 0; i < n; ) {
		std::vector<int> res = ask2(i);
		if(res==vector<int>{0, 0})return i;
		if(M[res[0]+res[1]]++>450){
			auto it=S.lower_bound(i);
			int l=0, r=n-i-1;
			while(V[*it]==res){
				l=*it-i;
				it++;
			}
			if(it!=S.end())r=*it-i;
			while(l<r){
				int m;
				m=(l+r+1)/2;
				vector<int> res2=ask2(i+m);
				if(res2==res)l=m;
				else r=m-1;
			}
			M[res[0]+res[1]]+=l;
			i+=l+1;
		}
		else i++;
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...