# Maximize the smallest array element by incrementing all elements in a K-length subarray by 1 exactly M times

Given an array arr[] of size N, and integers M and K, the task is to find the maximum possible value of the smallest array element by performing M operations. In each operation, increase the value of all elements in a contiguous subarray of length K by 1.Examples:Input: arr[ ] = {2, 2, 2, 2, 1, 1}, M = 1, K = 3Output: 2Explanation: Update the last 3 elements on the first move then updated array is [2, 2, 2, 3, 2, 2]. The smallest element has a value of 2.Input: arr[ ] = {5, 8}, M = 5, K = 1Output: 9Approach: The problem can be solved by using Binary Search. Traverse the array arr[] and for every element arr[i], count the number of operations required. If the current element is required to be updated x times, then add x to the answer and update the consecutive segment of length K by x times.Below is the implementation of the above approach:C++#include using namespace std;#define ll long longll n, m, k, l, r, i; ll check(ll v, vector& a){ ll tec = 0, ans = 0; vector b(n + k + 1); for (i = 0; i < n; i++) { tec -= b[i]; if (a[i] + tec < v) { ll mov = v - a[i] - tec; ans = ans + mov; tec += mov; b[i + k] = mov; } } return (ans 0) { ll tm = (l + r + 1) / 2; if (check(tm, a)) l = tm; else r = tm - 1; } return l;} int main(){ vector a{ 2, 2, 2, 2, 1, 1 }; m = 2; k = 3; n = a.size(); cout