Submission #69461

#TimeUsernameProblemLanguageResultExecution timeMemory
69461DiuvenThe Big Prize (IOI17_prize)C++14
97.55 / 100
78 ms2648 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; const int MX=200010; bool up[MX]; int L[MX], R[MX], sum, n; void my_ask(int i){ static set<int> S; if(S.find(i)!=S.end()) return; S.insert(i); vi now=ask(i); L[i]=now[0], R[i]=now[1]; } void search(int s, int e){ if(s>e) return; int m=(s+e)/2; my_ask(m); int lft=L[m]-(s==0 ? 0 : L[s-1]+up[s-1]); int rig=R[m]-(e==n-1 ? 0 : R[e+1]+up[e+1]); up[m] = L[m]+R[m]<sum; if(up[m] || lft>0) search(s,m-1); if(up[m] || rig>0) search(m+1,e); } void get(){ for(int i=0; i<min(50, n); i++){ my_ask(i); sum=max(sum, L[i]+R[i]); } } int find_best(int _n){ n=_n; get(); search(0,n-1); for(int i=0; i<n; i++) if(up[i]){ my_ask(i); if(L[i]==0 && R[i]==0) return i; } assert(false); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...