You are an operations manager for a company with n specialty retail stores. There are m different product types, and you are given a 0-indexed integer array quantities, where quantities[i] represents the number of products available for the i-th product type.
Your task is to distribute all products to the n retail stores, adhering to the following rules:
A single store can only be stocked with products of at most one type. It can, however, be given any amount of that product type.
After the distribution, you want to ensure the workload is balanced. Let x be the maximum number of products given to any single store. Your goal is to make x as small as possible.
Return the minimum possible value of x.
The first line of input contains an integer n, the number of stores.
The second line contains an integer m, the number of product types.
The third line contains m space-separated integers, representing the quantities array.
The output should be a single integer representing the minimum possible value for x (the minimized maximum number of products in any store).
The problem asks to "minimize the maximum" value, which is a classic indicator for a Binary Search on the Answer approach.
We can binary search for a potential value of x. For a given x, we can check if it's possible to distribute all products without any store holding more than x items.
To check if an x is valid, for each product type q in quantities, we can calculate how many stores are needed: ceil(q / x). If the sum of stores needed for all product types is less than or equal to n, then x is a possible maximum.
6
2
11 6
3
We need to find the smallest x that works. Let's test x = 3.
For the 11 products of type 0: We need ceil(11 / 3) = 4 stores.
For the 6 products of type 1: We need ceil(6 / 3) = 2 stores.
Total stores needed = 4 + 2 = 6.
Since we have 6 stores, x=3 is a possible maximum. We can't do better (e.g., with x=2, we would need ceil(11/2) + ceil(6/2) = 6 + 3 = 9 stores, which we don't have). Thus, the minimum possible x is 3.
The expected time complexity is O(M * log(P)), where M is the number of product types and P is the maximum quantity of any single product type.
1 <= n, m <= 10^5
1 <= quantities[i] <= 10^5