#include "ricehub.h"
#include <bits/stdc++.h>
using namespace std;
int besthub(int R, int L, int X[], long long B) {
vector<long long> pref(R);
pref[0] = X[0];
for (int i = 1; i < R; i++) pref[i] = pref[i - 1] + X[i];
int ans = 1;
for (int i = 0; i < R; i++) {
int ll = 0, rr = min(i, R - i - 1);
while (ll < rr) {
int mid = (ll + rr + 1) / 2;
int l = i - mid;
int r = i - 1;
long long lsum = (l > 0 ? pref[r] - pref[l - 1] : (r >= 0 ? pref[r] : 0));
l = i + 1;
r = i + mid;
long long rsum = pref[r] - pref[l - 1];
long long cost = rsum - lsum;
if (cost <= B) ll = mid;
else rr = mid - 1;
}
int l = i - ll;
int r = i - 1;
long long lsum = (l > 0 ? pref[r] - pref[l - 1] : (r >= 0 ? pref[r] : 0));
l = i + 1;
r = i + ll;
long long rsum = pref[r] - pref[l - 1];
if (rsum - lsum <= B) {
ans = max(ans, 2 * ll + 1);
}
}
for (int i = 0; i + 1 < R; i++) {
int ll = 0, rr = min(i + 1, R - i - 1);
while (ll < rr) {
int mid = (ll + rr + 1) / 2;
int l = i - mid + 1;
int r = i;
long long lsum = pref[r] - pref[l - 1];
l = i + 1;
r = i + mid;
long long rsum = pref[r] - pref[l - 1];
long long cost = rsum - lsum;
if (cost <= B) ll = mid;
else rr = mid - 1;
}
int l = i - ll + 1;
int r = i;
long long lsum = pref[r] - pref[l - 1];
l = i + 1;
r = i + ll;
long long rsum = pref[r] - pref[l - 1];
if (rsum - lsum <= B) {
ans = max(ans, 2 * ll);
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |