#include<bits/stdc++.h>
#include "ricehub.h"
using ll = long long;
using namespace std;
ll pre_sum[100002];
ll range_sum(ll lo, ll hi) {
if ( lo == 0) return pre_sum[hi];
return pre_sum[hi] - pre_sum[lo - 1];
}
int besthub(int R, int L, int X[], long long B){
ll lo, hi, mid, lo1, hi1, lo2, hi2, sum;
for (int i = 0; i < R; i ++) {
if ( i == 0) pre_sum[i] = X[i];
else pre_sum[i] = pre_sum[i - 1] + X[i];
}
ll s = 0;
for (int i = 0; i < R; i ++) {
lo = 0;
hi = 1e9 + 1;
while ( lo < hi) {
mid = (lo + hi)/2;
sum =0 ;
lo1 = lower_bound(X, X + R, X[i] - mid) - X;
hi1 = i;
lo2 = i;
hi2 = upper_bound(X, X + R, X[i] + mid) - X - 1;
sum = sum + (hi1 - lo1 + 1) * X[i] - range_sum(lo1, hi1);
sum = sum + range_sum(lo2, hi2) - (hi2 - lo2 + 1) * X[i];
if ( sum <= B) lo = mid + 1;
else hi = mid;
}
lo --;
mid = lo;
sum =0 ;
lo1 = lower_bound(X, X + R, X[i] - mid) - X;
hi1 = i;
lo2 = i;
hi2 = upper_bound(X, X + R, X[i] + mid) - X - 1;
sum = sum + (hi1 - lo1 + 1) * X[i] - range_sum(lo1, hi1);
sum = sum + range_sum(lo2, hi2) - (hi2 - lo2 + 1) * X[i];
s = max(s, hi2 - lo1 + 1);
}
return s;
}
# | 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... |