Submission #1163397

#TimeUsernameProblemLanguageResultExecution timeMemory
1163397MrDogMeatThe Big Prize (IOI17_prize)C++20
97.39 / 100
15 ms5256 KiB
#include<bits/stdc++.h> using namespace std; std::vector<int> ask(int i); const int MAXN = 2e5; int Ans = -1; vector<int> A[MAXN]; int Max; vector<int> ASK(int x) { if(!A[x].size()) A[x] = ask(x); if(A[x][0] + A[x][1] == 0) Ans = x; return A[x]; } int sumA(int x) { ASK(x); return A[x][0] + A[x][1]; } void solve(int l, int r) { if(l >= r || Ans != -1) return; int mid = (l + r) / 2, ml = mid, mr = mid; while(sumA(ml) < Max) ml--; while(sumA(mr) < Max) mr++; if(A[ml][0] - A[l][0] > 0) solve(l, ml); if(A[r][0] - A[mr][0] > 0) solve(mr, r); } int find_best(int n) { for(int i = 0; i < 500; i++) ask(0); for(int i = 0; i < min(500, n); i++) { Max = max(Max, sumA(i)); if(Max > 30) break; } int l = 0, r = n - 1; while(sumA(l) < Max) l++; while(sumA(r) < Max) r--; solve(l, r); return Ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...