Submission #615648

#TimeUsernameProblemLanguageResultExecution timeMemory
615648IvanJThe Big Prize (IOI17_prize)C++17
0 / 100
9 ms9868 KiB
#include<bits/stdc++.h> #include "prize.h" #define pb push_back using namespace std; const int maxn = 2e5 + 5; vector<int> A[maxn]; vector<int> V; void find(int lo, int hi) { int mid = (lo + hi) / 2; if(A[mid].size() == 0) A[mid] = ask(mid); if(A[mid][0] + A[mid][1] < A[hi][0] + A[hi][1]) {V.pb(mid);return;} if(A[mid][1] == A[hi][1]) hi = mid; else lo = mid + 1; } void solve(int lo, int hi) { if(lo == 0 && A[hi][0] == 0) return; if(lo == 0 && A[hi][0] == 1) {find(lo, hi);return;} if(lo && A[lo - 1][1] == A[hi][1]) return; if(lo && A[lo - 1][1] == A[hi][1] + 1) {find(lo, hi);return;} int mid = (lo + hi) / 2; int mid1 = mid; while(1) { if(A[mid1].size() == 0) A[mid1] = ask(mid1); if(A[mid1][0] + A[mid1][1] < A[hi][0] + A[hi][1]) V.pb(mid1), mid1--; else break; if(mid1 < lo) break; } if(lo < mid1) solve(lo, mid1); solve(mid + 1, hi); } int find_best(int n) { int pos = -1; int s = sqrt(n); s++; for(int i = n - 1;i >= n - s;i--) { A[i] = ask(i); if(pos == -1 || A[i][0] + A[i][1] > A[pos][0] + A[pos][1]) pos = i; } for(int i = pos + 1;i < n;i++) V.pb(i); solve(0, pos); for(int i : V) { A[i] = ask(i); if(A[i][0] + A[i][1] == 0) return i; } }

Compilation message (stderr)

prize.cpp: In function 'int find_best(int)':
prize.cpp:57:1: warning: control reaches end of non-void function [-Wreturn-type]
   57 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...