Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef vector < ll > vll;
- typedef pair < ll, ll > pll;
- typedef pair < int , int > pii;
- typedef vector < int > vii;
- #define rep(i, n) for(int i = 0; i < n; ++i)
- #define reps(i, a, n) for (int i = a; i < n; ++i)
- #define fst first
- #define l(x) (((x) << 1) | 1)
- #define r(x) (l(x) + 1)
- #define snd second
- #define ajd adj
- long long R, L, B;
- ll X[100000 + 500];
- long long besthub(long long R, long long L, long long X[], long long B);
- ll cost = 0;
- ll INF = 1LL << 62LL;
- ll ans = 1;
- ll F[100000 + 500];
- ll S[100000 + 500];
- long long besthub(long long R, long long L, long long X[], long long B)
- {
- ll start = 0, end = 1;
- rep (i, R) F[i] = X[i];
- S[0] = F[0];
- reps (i, 1, R) S[i] = S[i - 1] + F[i];
- F[R] = INF;
- sort(F, F + R);
- while (end < R) {
- //cout << end << " " << start << " " << cost << '\n';
- if (start >= end) {
- end = start + 1;
- cost = 0;
- continue;
- }
- long long mid = (start + end) / 2;
- ll cost1 = F[mid] * (mid - start + 1) - S[mid] + (start > 0 ? S[start - 1] : 0);
- cost1 += S[end] - S[mid] - F[mid] * (end - mid);
- if (cost1 <= B) end++;
- else start++;
- ans = max(ans, end - start);
- }
- ans = max(ans, end - start);
- return ans;
- }
- int main() {
- ios_base::sync_with_stdio(false); cin.tie(0);
- cin >> R >> L >> B;
- for (int i = 0; i < R; ++i) cin >> X[i];
- cout << besthub(R, L, X, B) << '\n';
- }
- // g++ -W -Wall -O2 ricehub.cpp grader.cpp -o ricehub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement