# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1216735 | takoshanava | Rice Hub (IOI11_ricehub) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;
int besthub(int r, int l, int x[], int b) {
vector<int> pref(r + 1, 0);
for (int i = 0; i < r; ++i) {
pref[i + 1] = pref[i] + x[i];
}
int res = 1;
int ll = 1, rr = r;
while (ll <= rr) {
int mid = (ll + rr) / 2;
bool ok = false;
for (int i = 0; i + mid <= r; ++i) {
int s = i;
int t = i + mid - 1;
int p = (s + t) / 2;
int rp = x[p];
int lcnt = p - s;
int lsum = pref[p] - pref[s];
int rcnt = t - p;
int rsum = pref[t + 1] - pref[p + 1];
int cost = (rp * lcnt - lsum) + (rsum - rp * rcnt);
if (cost <= b) {
ok = true;
break;
}
}
if (ok) {
res = x[mid - 1];
ll = mid + 1;
} else {
rr = mid - 1;
}
}
return res;
}