Submission #1161569

#TimeUsernameProblemLanguageResultExecution timeMemory
1161569gelastropodThe Big Prize (IOI17_prize)C++20
20 / 100
23 ms1944 KiB
#include "prize.h" #include <bits/stdc++.h> using namespace std; int find_best(int n) { // 5 types! vector<pair<int, int>> cache(n, { -1, -1 }); int lolpop = n; for (int i = 0; i < min(n, 500); i++) { auto j = ask(i); cache[i] = { j[0], j[1] }; lolpop = min(lolpop, j[0] + j[1]); } int crnt = 0; while (crnt < n) { auto crntval = cache[crnt]; if (crntval.first == -1) { auto j = ask(crnt); crntval = { j[0], j[1] }; cache[crnt] = crntval; } int low = crnt, high = n - 1, ans = -1; while (low <= high) { int x = (low + high) / 2; pair<int, int> qry = cache[x]; if (qry.first == -1) { auto j = ask(x); qry = { j[0], j[1] }; cache[x] = qry; } if (qry.second != crntval.second) { high = x - 1; } else { low = x + 1; ans = x; } } crnt = ans + 1; while (crnt < n) { auto qry = cache[crnt]; if (qry.first == -1) { auto j = ask(crnt); qry = { j[0], j[1] }; cache[crnt] = qry; } if (qry.first + qry.second == 0) return crnt; if (qry.first + qry.second == lolpop) break; crnt++; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...