제출 #1217416

#제출 시각아이디문제언어결과실행 시간메모리
1217416countless쌀 창고 (IOI11_ricehub)C++20
100 / 100
12 ms1220 KiB
#include "ricehub.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define sp <<" "<< #define endl "\n" int besthub(int R, int L, int X[], ll B) { // possible to take x elements in B cost auto check = [&](int x) -> bool { if (x == 1) return true; if (x == 2) { for (int i = 1; i < R; i++) { if (X[i] - X[i-1] <= B) return true; } return false; } ll best = LLONG_MAX, curr = 0; int amt = x; amt--; deque<int> left, right; int m = (amt + 1) / 2; int med = X[m]; int ind = 0; for (ind = 0; ind < m; ind++) left.push_back(X[ind]), curr += (med - X[ind]); ind++; // take med for (; ind < x; ind++) right.push_back(X[ind]), curr += (X[ind] - med); best = min(best, curr); // ensure ll later for (int i = x; i < R; i++) { curr -= (med - left.front()); left.pop_front(); left.push_back(med); med = right.front(); curr += (med - left.back()) * left.size(); curr -= (med - left.back()) * right.size(); right.pop_front(); right.push_back(X[i]); curr += (X[i] - med); best = min(best, curr); } return best <= B; }; int l = 0, r = R; while (r - l > 1) { int m = (l + r) / 2; if (check(m)) { l = m; } else { r = m; } } if (check(r)) l = r; return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...