# Find range of values for S in given Array with values satisfying [ arr[i] = floor((i*S)/K) ]

• Last Updated : 29 Sep, 2021

Given an array arr[] of N positive integers and a positive integer K, the task is to find the range [L, R] such that for all the elements in this range, say S each array element arr[i] is floor((i*S)/K).

Examples:

Input: N = 5, K = 10, arr[] = {2, 4, 6, 9, 11}
Output: 23 23
Explanation:
When S = 23, substituting in the equation gives the same array values:
arr[1] = floor((1*23)/10) = 2
arr[2] = floor((2*23/10)) = 4
arr[3] = floor((3*23/10)) = 6
arr[4] = floor((4*23/10)) = 9
arr[5] = floor((5*23/10)) = 11

Input: N = 5, K = 100, arr[] = {0, 0, 0, 0, 1}
Output: 20 24

Approach: Follow the below steps to solve the given problem:

• Initialize two variables say L and R as INT_MIN and INT_MAX that stores the value of the left range and the right range respectively.
• Traverse the given array arr[] and perform the following steps:
• Find the possible value of the left range for the ith array element as ceil(1.0*arr[i]*K/(i + 1)).
• Find the possible value of the right range for the ith array element as ceil((1.0 + arr[i])*K/(i + 1)) – 1.
• Update the value of L as max(L, l) and the value of R as min(R, r).
• After completing the above steps, print the values of L and R as the resultant range.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ` `using` `namespace` `std;`   `// Function to find the range of values` `// for S in a given array that satisfies` `// the given condition` `void` `findRange(``int` `arr[], ``int` `N, ``int` `K)` `{`   `    ``// Stores the left range value` `    ``int` `L = INT_MIN;`   `    ``// Stores the right range value` `    ``int` `R = INT_MAX;`   `    ``for` `(``int` `i = 0; i < N; i++) {` `        ``// Find the current left range` `        ``// value for S` `        ``int` `l = (``int``)``ceil``(1.0 * arr[i] * K / (i + 1));`   `        ``// Find the current right range` `        ``// value for S` `        ``int` `r = (``int``)``ceil``((1.0 + arr[i]) * K / (i + 1)) - 1;`   `        ``// Updating L value` `        ``L = max(L, l);`   `        ``// Updating R value` `        ``R = min(R, r);` `    ``}`   `    ``cout << L << ``" "` `<< R;` `}`   `// Driver Code` `int` `main()` `{`   `    ``int` `arr[] = { 2, 4, 6, 9, 11 };` `    ``int` `K = 10;` `    ``int` `N = ``sizeof``(arr) / ``sizeof``(``int``);`   `    ``findRange(arr, N, K);` `    ``return` `0;` `}`   `// This code is contributed by Potta Lokesh`

## Java

 `// Java program for the above approach`   `import` `java.util.*;` `import` `java.lang.*;`   `class` `Codechef {`   `    ``// Function to find the range of values` `    ``// for S in a given array that satisfies` `    ``// the given condition` `    ``static` `void` `findRange(``int` `arr[], ``int` `N,` `                          ``int` `K)` `    ``{`   `        ``// Stores the left range value` `        ``int` `L = Integer.MIN_VALUE;`   `        ``// Stores the right range value` `        ``int` `R = Integer.MAX_VALUE;`   `        ``for` `(``int` `i = ``0``; i < N; i++) {` `            ``// Find the current left range` `            ``// value for S` `            ``int` `l = (``int``)Math.ceil(` `                ``1.0` `* arr[i] * K / (i + ``1``));`   `            ``// Find the current right range` `            ``// value for S` `            ``int` `r = (``int``)Math.ceil(` `                        ``(``1.0` `+ arr[i]) * K / (i + ``1``))` `                    ``- ``1``;`   `            ``// Updating L value` `            ``L = Math.max(L, l);`   `            ``// Updating R value` `            ``R = Math.min(R, r);` `        ``}`   `        ``System.out.println(L + ``" "` `+ R);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``int` `arr[] = { ``2``, ``4``, ``6``, ``9``, ``11` `};` `        ``int` `K = ``10``;` `        ``int` `N = arr.length;`   `        ``findRange(arr, N, K);` `    ``}` `}`

## Python3

 `# Python 3 program for the above approach` `from` `math ``import` `ceil,floor` `import` `sys`   `# Function to find the range of values` `# for S in a given array that satisfies` `# the given condition` `def` `findRange(arr, N, K):` `  `  `    ``# Stores the left range value` `    ``L ``=` `-``sys.maxsize``-``1`   `    ``# Stores the right range value` `    ``R ``=` `sys.maxsize`   `    ``for` `i ``in` `range``(N):` `      `  `        ``# Find the current left range` `        ``# value for S` `        ``l ``=` `ceil(``1.0` `*` `arr[i] ``*` `K ``/` `(i ``+` `1``))`   `        ``# Find the current right range` `        ``# value for S` `        ``r ``=` `ceil((``1.0` `+` `arr[i]) ``*` `K ``/` `(i ``+` `1``) ``-` `1``)`   `        ``# Updating L value` `        ``L ``=` `max``(L, l)`   `        ``# Updating R value` `        ``R ``=` `min``(R, r)`   `    ``print``(L,R)`   `# Driver Code` `if` `__name__ ``=``=` `'__main__'``:` `    ``arr ``=` `[``2``, ``4``, ``6``, ``9``, ``11``]` `    ``K ``=` `10` `    ``N ``=` `len``(arr)` `    ``findRange(arr, N, K)` `    `  `    ``# This code is contributed by SURENDRA_GANGWAR.`

## C#

 `// C# program for the above approach`   `using` `System;`   `class` `GFG {`   `    ``// Function to find the range of values` `    ``// for S in a given array that satisfies` `    ``// the given condition` `    ``static` `void` `findRange(``int``[] arr, ``int` `N, ``int` `K)` `    ``{`   `        ``// Stores the left range value` `        ``int` `L = Int32.MinValue;`   `        ``// Stores the right range value` `        ``int` `R = Int32.MaxValue;`   `        ``for` `(``int` `i = 0; i < N; i++) ` `        ``{` `          `  `            ``// Find the current left range` `            ``// value for S` `            ``int` `l = (``int``)Math.Ceiling(1.0 * arr[i] * K` `                                      ``/ (i + 1));`   `            ``// Find the current right range` `            ``// value for S` `            ``int` `r = (``int``)Math.Ceiling((1.0 + arr[i]) * K` `                                      ``/ (i + 1))` `                    ``- 1;`   `            ``// Updating L value` `            ``L = Math.Max(L, l);`   `            ``// Updating R value` `            ``R = Math.Min(R, r);` `        ``}`   `        ``Console.WriteLine(L + ``" "` `+ R);` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main()` `    ``{` `        ``int``[] arr = { 2, 4, 6, 9, 11 };` `        ``int` `K = 10;` `        ``int` `N = arr.Length;`   `        ``findRange(arr, N, K);` `    ``}` `}`   `// This code is contributed by subham348.`

## Javascript

 ``

Output:

`23 23`

Time Complexity: O(N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Related Articles