function
isvalid(a, n, k, w, mid) {
let ps =
new
Array(n).fill(0);
let ans = 0;
for
(let i = 0; i < n; i++) {
if
(i - 1 >= 0) ps[i] += ps[i - 1];
if
(a[i] + ps[i] < mid) {
let e = mid - a[i] - ps[i];
ans += e;
ps[i] += e;
if
(i + w < n) ps[i + w] -= e;
}
}
return
ans <= k;
}
function
maximizeMinHeight(n, k, w, a) {
let ans = 0;
let l = 0,
h = 1e14;
while
(l <= h) {
let mid = Math.floor((l + h) / 2);
if
(isvalid(a, n, k, w, mid)) {
l = mid + 1;
ans = mid;
}
else
{
h = mid - 1;
}
}
return
ans;
}
let N = 6,
K = 2,
W = 3;
let a = [2, 2, 2, 2, 1, 1];
let ans = maximizeMinHeight(N, K, W, a);
console.log(ans);