Submission #58985

#TimeUsernameProblemLanguageResultExecution timeMemory
58985tugushkaThe Big Prize (IOI17_prize)C++14
90 / 100
128 ms1508 KiB
#include "prize.h" #include<bits/stdc++.h> using namespace std; vector < int > res, a; map < int, vector < int > > x; map < int , int > cnt; int sq, mx; int find_best(int n){ int now = 0; sq = sqrt(n); for( ; now < min(sq+30, n-1) ; now++ ){ if( x[now].empty() ) res = ask(now); else res = ask(now); x[now] = res; cnt[res[0]+res[1]]++; mx = max( res[0]+res[1], mx ); if( res[0] == 0 && res[1] == 0 ) return now; } while( 1 ){ if( x[now].empty() ) res = ask(now); else res = ask(now); x[now] = res; if( res[0] == 0 && res[1] == 0 ) return now; if( res[0]+res[1] == mx ){ int l = now, r = min(n-1, now+int(sqrt(n))); while( l < r ){ int mid = (l+r+1)/2; if( x[mid].empty() ) a = ask(mid), x[mid] = a; else a = x[mid]; if( !a[0] && !a[1] ) return mid; if( res[0] == a[0] && res[1] == a[1] ) l = mid; else r = mid-1; } now = l+1; } else now++; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...