Submission #1117038

#TimeUsernameProblemLanguageResultExecution timeMemory
1117038ZflopRice Hub (IOI11_ricehub)C++14
100 / 100
15 ms5712 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; const int NMAX = (int)1e5 * 2; long long pref_val[NMAX],suf_val[NMAX]; int besthub(int R, int L, int X[], long long B) { for (int i = 0; i < R;++i) { pref_val[i] = X[i]; if (i) { pref_val[i] += pref_val[i - 1]; } } for (int i = R - 1; i >= 0;--i) { suf_val[i] = suf_val[i + 1] + L - X[i]; } int l = 1,r = R; int ans = 1; while (l <= r) { long long mid = (l + r) / 2; //cout << mid << ' ' << "here\n"; bool ok = false; for (long long i = 0; i < R - mid + 1;++i) { long long id = i + mid / 2; long long left_part = suf_val[i] - suf_val[id] - (id - i) * (L - X[id]); long long right_part = pref_val[i + mid - 1] - pref_val[id] - (mid - (id - i) - 1) * X[id]; long long cost = left_part + right_part; //cout << cost << ' ' << mid << ' ' << left_part << ' ' << right_part << '\n'; if (cost <= B) ok = true; } if (ok) { ans = mid; l = mid + 1; } else r = mid - 1; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...