Submission #1063183

#TimeUsernameProblemLanguageResultExecution timeMemory
1063183ArthuroWichThe Big Prize (IOI17_prize)C++17
100 / 100
43 ms11656 KiB
#include"prize.h" #include<bits/stdc++.h> using namespace std; vector<vector<int>> seg(200005, {-1, -1}); int ans = -1, mx = 0; void check(int i) { if (seg[i][0] == seg[i][1] && seg[i][0] == 0) { ans = i; } } void Ask(int i) { if (seg[i][0] == -1) { seg[i] = ask(i); mx = max(mx, seg[i][0]+seg[i][1]); check(i); } } void calc(int l, int r, int xl, int xr) { if (ans != -1) { return; } if (r-l < 2) { Ask(l); Ask(r); return; } if (xl+xr >= mx) { return; } int m1 = (l+r)/2, m2 = (l+r)/2; for (; m1 > l; m1--) { Ask(m1); if (ans != -1) { return; } if (seg[m1][0]+seg[m1][1] == mx) { break; } } calc(l, m1, xl, seg[m1][1]); if (ans != -1) { return; } for (; m2 < r; m2++) { Ask(m2); if (ans != -1) { return; } if (seg[m2][0]+seg[m2][1] == mx) { break; } } calc(m2, r, seg[m2][0], xr); } int find_best(int n) { srand(time(NULL)); for (int i = 0; i < 240; i++) { Ask(rand()%n); } calc(0, n-1, 0, 0); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...