제출 #1030967

#제출 시각아이디문제언어결과실행 시간메모리
1030967coolboy19521커다란 상품 (IOI17_prize)C++17
99.72 / 100
35 ms5928 KiB
#include "prize.h" #include "iostream" using namespace std; const int sz = 2e5 + 10; vector<int> bf[sz]; vector<int> Ask(int x) { if (bf[x].size()) return bf[x]; return bf[x] = ask(x); } int find_best(int n) { int mx = 0, xx = 500; for (int i = 0; i < min(n, 500); i ++) { auto pr = Ask(i); mx = max(mx, pr[0] + pr[1]); if (0 == pr[0] + pr[1]) return i; if (30 < mx) { xx = i + 1; break; } } int ls = xx; while (ls < n) { int ps = -1; for (; ls < n; ls ++) { auto pr = Ask(ls); int sm = pr[0] + pr[1]; if (0 == sm) return ls; if (sm == mx) { ps = pr[1]; break; } } int ds = xx; int rs = n; while (1 < rs - ds) { int mi = (ds + rs) / 2; if (mi <= ls) { ds = mi; continue; } auto pr = Ask(mi); int sm = pr[0] + pr[1]; if (0 == sm) return mi; if (sm != mx) rs = mi; if (0 == ps - pr[1]) ds = mi; else rs = mi; } ls = ds + 1; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...