# Queries for counts of array elements with values in given range

• Difficulty Level : Medium
• Last Updated : 14 Jul, 2022

Given an unsorted array of size n, find no of elements between two elements i and j (both inclusive).

Examples:

```Input :  arr = [1 3 3 9 10 4]
i1 = 1, j1 = 4
i2 = 9, j2 = 12
Output : 4
2
The numbers are: 1 3 3 4 for first query
The numbers are: 9 10 for second query```

Source: Amazon Interview Experience

A simple approach will be to run a for loop to check if each element is in the given range and maintain their count. Time complexity for running each query will be O(n).

Implementation:

## C++

 `// Simple C++ program to count number of elements` `// with values in given range.` `#include ` `using` `namespace` `std;`   `// function to count elements within given range` `int` `countInRange(``int` `arr[], ``int` `n, ``int` `x, ``int` `y)` `{` `    ``// initialize result` `    ``int` `count = 0;` `    ``for` `(``int` `i = 0; i < n; i++) {`   `        ``// check if element is in range` `        ``if` `(arr[i] >= x && arr[i] <= y)` `            ``count++;` `    ``}` `    ``return` `count;` `}`   `// driver function` `int` `main()` `{` `    ``int` `arr[] = { 1, 3, 4, 9, 10, 3 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);`   `    ``// Answer queries` `    ``int` `i = 1, j = 4;` `    ``cout << countInRange(arr, n, i, j) << endl;`   `    ``i = 9, j = 12;` `    ``cout << countInRange(arr, n, i, j) << endl;` `    ``return` `0;` `}`

## Java

 `// Simple java program to count ` `// number of elements with ` `// values in given range.` `import` `java.io.*;`   `class` `GFG ` `{` `    ``// function to count elements within given range` `    ``static` `int` `countInRange(``int` `arr[], ``int` `n, ``int` `x, ``int` `y)` `    ``{` `        ``// initialize result` `        ``int` `count = ``0``;` `        ``for` `(``int` `i = ``0``; i < n; i++) {` `    `  `            ``// check if element is in range` `            ``if` `(arr[i] >= x && arr[i] <= y)` `                ``count++;` `        ``}` `        ``return` `count;` `    ``}`   `    ``// driver function` `    ``public` `static` `void` `main (String[] args)` `    ``{` `        ``int` `arr[] = { ``1``, ``3``, ``4``, ``9``, ``10``, ``3` `};` `        ``int` `n = arr.length;`   `        ``// Answer queries` `        ``int` `i = ``1``, j = ``4``;` `        ``System.out.println ( countInRange(arr, n, i, j)) ;` `    `  `        ``i = ``9``;` `        ``j = ``12``;` `        ``System.out.println ( countInRange(arr, n, i, j)) ;` `        `  `        `  `    ``}` `}`   `// This article is contributed by vt_m`

## Python3

 `# function to count elements within given range` `def` `countInRange(arr, n, x, y):`   `    ``# initialize result` `    ``count ``=` `0``;`   `    ``for` `i ``in` `range``(n):`   `        ``# check if element is in range` `        ``if` `(arr[i] >``=` `x ``and` `arr[i] <``=` `y):` `            ``count ``+``=` `1` `    ``return` `count`   `# driver function` `arr ``=` `[``1``, ``3``, ``4``, ``9``, ``10``, ``3``]` `n ``=` `len``(arr)`   `# Answer queries` `i ``=` `1` `j ``=` `4` `print``(countInRange(arr, n, i, j))` `i ``=` `9` `j ``=` `12` `print``(countInRange(arr, n, i, j))`

## C#

 `// Simple C# program to count ` `// number of elements with ` `// values in given range.` `using` `System;`   `class` `GFG  {` `    `  `    ``// function to count elements` `    ``// within given range` `    ``static` `int` `countInRange(``int` `[]arr, ``int` `n, ` `                            ``int` `x, ``int` `y)` `    ``{` `        `  `        ``// initialize result` `        ``int` `count = 0;` `        ``for` `(``int` `i = 0; i < n; i++) {` `    `  `            ``// check if element is in range` `            ``if` `(arr[i] >= x && arr[i] <= y)` `                ``count++;` `        ``}` `        ``return` `count;` `    ``}`   `    ``// Driver Code` `    ``public` `static` `void` `Main ()` `    ``{` `        ``int``[]arr = {1, 3, 4, 9, 10, 3};` `        ``int` `n = arr.Length;`   `        ``// Answer queries` `        ``int` `i = 1, j = 4;` `        ``Console.WriteLine( countInRange(arr, n, i, j)) ;` `    `  `        ``i = 9;` `        ``j = 12;` `        ``Console.WriteLine( countInRange(arr, n, i, j)) ;` `        `  `        `  `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 `= ``\$x` `&& ` `            ``\$arr``[``\$i``] <= ``\$y``)` `            ``\$count``++;` `    ``}` `    ``return` `\$count``;` `}`   `    ``// Driver Code` `    ``\$arr` `= ``array``(1, 3, 4, 9, 10, 3);` `    ``\$n` `= ``count``(``\$arr``);`   `    ``// Answer queries` `    ``\$i` `= 1;` `    ``\$j` `= 4;` `    ``echo` `countInRange(``\$arr``, ``\$n``, ``\$i``, ``\$j``).``"\n"``;`   `    ``\$i` `= 9;` `    ``\$j` `= 12;` `    ``echo` `countInRange(``\$arr``, ``\$n``, ``\$i``, ``\$j``).``"\n"``;` `    `  `// This code is contributed by Sam007` `?>`

## Javascript

 ``

Output

```4
2```

Time Complexity: O(n),
Auxiliary Space: O(1)

An Efficient Approach will be to first sort the array and then using a modified binary search function find two indices, one of first element greater than or equal to lower bound of range and the other of the last element less than or equal to upperbound. Time for running each query will be O(logn) and for sorting the array once will be O(nlogn).

Implementation:

## C++

 `// Efficient C++ program to count number of elements` `// with values in given range.` `#include ` `using` `namespace` `std;`   `// function to find first index >= x` `int` `lowerIndex(``int` `arr[], ``int` `n, ``int` `x)` `{` `    ``int` `l = 0, h = n - 1;` `    ``while` `(l <= h) {` `        ``int` `mid = (l + h) / 2;` `        ``if` `(arr[mid] >= x)` `            ``h = mid - 1;` `        ``else` `            ``l = mid + 1;` `    ``}` `    ``return` `l;` `}`   `// function to find last index <= y` `int` `upperIndex(``int` `arr[], ``int` `n, ``int` `y)` `{` `    ``int` `l = 0, h = n - 1;` `    ``while` `(l <= h) {` `        ``int` `mid = (l + h) / 2;` `        ``if` `(arr[mid] <= y)` `            ``l = mid + 1;` `        ``else` `            ``h = mid - 1;` `    ``}` `    ``return` `h;` `}`   `// function to count elements within given range` `int` `countInRange(``int` `arr[], ``int` `n, ``int` `x, ``int` `y)` `{` `    ``// initialize result` `    ``int` `count = 0;` `    ``count = upperIndex(arr, n, y) - lowerIndex(arr, n, x) + 1;` `    ``return` `count;` `}`   `// driver function` `int` `main()` `{` `    ``int` `arr[] = { 1, 4, 4, 9, 10, 3 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);`   `    ``// Preprocess array` `    ``sort(arr, arr + n);`   `    ``// Answer queries` `    ``int` `i = 1, j = 4;` `    ``cout << countInRange(arr, n, i, j) << endl;`   `    ``i = 9, j = 12;` `    ``cout << countInRange(arr, n, i, j) << endl;` `    ``return` `0;` `}`

## Java

 `// Efficient C++ program to count number ` `// of elements with values in given range.` `import` `java.io.*;` `import` `java.util.Arrays;`   `class` `GFG ` `{` `    ``// function to find first index >= x` `    ``static` `int` `lowerIndex(``int` `arr[], ``int` `n, ``int` `x)` `    ``{` `        ``int` `l = ``0``, h = n - ``1``;` `        ``while` `(l <= h) ` `        ``{` `            ``int` `mid = (l + h) / ``2``;` `            ``if` `(arr[mid] >= x)` `                ``h = mid - ``1``;` `            ``else` `                ``l = mid + ``1``;` `        ``}` `        ``return` `l;` `    ``}` `    `  `    ``// function to find last index <= y` `    ``static` `int` `upperIndex(``int` `arr[], ``int` `n, ``int` `y)` `    ``{` `        ``int` `l = ``0``, h = n - ``1``;` `        ``while` `(l <= h) ` `        ``{` `            ``int` `mid = (l + h) / ``2``;` `            ``if` `(arr[mid] <= y)` `                ``l = mid + ``1``;` `            ``else` `                ``h = mid - ``1``;` `        ``}` `        ``return` `h;` `    ``}` `    `  `    ``// function to count elements within given range` `    ``static` `int` `countInRange(``int` `arr[], ``int` `n, ``int` `x, ``int` `y)` `    ``{` `        ``// initialize result` `        ``int` `count = ``0``;` `        ``count = upperIndex(arr, n, y) - ` `                ``lowerIndex(arr, n, x) + ``1``;` `        ``return` `count;` `    ``}` `    `  `    ``// Driver function` `    ``public` `static` `void` `main (String[] args) ` `    ``{` `        ``int` `arr[] = { ``1``, ``4``, ``4``, ``9``, ``10``, ``3` `};` `        ``int` `n = arr.length;` `    `  `        ``// Preprocess array` `        ``Arrays.sort(arr);` `    `  `        ``// Answer queries` `        ``int` `i = ``1``, j = ``4``;` `        ``System.out.println( countInRange(arr, n, i, j)); ;` `    `  `        ``i = ``9``;` `        ``j = ``12``;` `        ``System.out.println( countInRange(arr, n, i, j));` `    `    `    ``}` `}`   `// This article is contributed by vt_m.`

## Python3

 `# function to find first index >= x` `def` `lowerIndex(arr, n, x):` `  ``l ``=` `0` `  ``h ``=` `n``-``1` `  ``while` `(l <``=` `h):` `    ``mid ``=` `int``((l ``+` `h)``/``/``2``)` `    ``if` `(arr[mid] >``=` `x):` `      ``h ``=` `mid ``-` `1` `    ``else``:` `      ``l ``=` `mid ``+` `1` `  ``return` `l`     `# function to find last index <= x` `def` `upperIndex(arr, n, x):` `  ``l ``=` `0` `  ``h ``=` `n``-``1` `  ``while` `(l <``=` `h):` `    ``mid ``=` `int``((l ``+` `h)``/``/``2``)` `    ``if` `(arr[mid] <``=` `x):` `      ``l ``=` `mid ``+` `1` `    ``else``:` `      ``h ``=` `mid ``-` `1` `  ``return` `h`     `# function to count elements within given range` `def` `countInRange(arr, n, x, y):` `  ``# initialize result` `  ``count ``=` `0``;` `  ``count ``=` `upperIndex(arr, n, y) ``-` `lowerIndex(arr, n, x) ``+` `1``;` `  ``return` `count`   `# driver function` `arr ``=` `[``1``, ``3``, ``4``, ``9``, ``10``, ``3``]`   `# Preprocess array` `arr.sort()` `n ``=` `len``(arr)`   `# Answer queries` `i ``=` `1` `j ``=` `4` `print``(countInRange(arr, n, i, j))` `i ``=` `9` `j ``=` `12` `print``(countInRange(arr, n, i, j))`

## C#

 `// Efficient C# program to count number ` `// of elements with values in given range.` `using` `System;`   `class` `GFG ` `{` `    `  `    ``// function to find first index >= x` `    ``static` `int` `lowerIndex(``int` `[]arr, ``int` `n,` `                          ``int` `x)` `    ``{` `        `  `        ``int` `l = 0, h = n - 1;` `        ``while` `(l <= h) ` `        ``{` `            ``int` `mid = (l + h) / 2;` `            ``if` `(arr[mid] >= x)` `                ``h = mid - 1;` `            ``else` `                ``l = mid + 1;` `        ``}` `        ``return` `l;` `    ``}` `    `  `    ``// function to find last index <= y` `    ``static` `int` `upperIndex(``int` `[]arr, ``int` `n,` `                          ``int` `y)` `    ``{` `        ``int` `l = 0, h = n - 1;` `        ``while` `(l <= h) ` `        ``{` `            ``int` `mid = (l + h) / 2;` `            ``if` `(arr[mid] <= y)` `                ``l = mid + 1;` `            ``else` `                ``h = mid - 1;` `        ``}` `        ``return` `h;` `    ``}` `    `  `    ``// function to count elements ` `    ``// within given range` `    ``static` `int` `countInRange(``int` `[]arr, ``int` `n, ` `                            ``int` `x, ``int` `y)` `    ``{` `        `  `        ``// initialize result` `        ``int` `count = 0;` `        ``count = upperIndex(arr, n, y) - ` `                ``lowerIndex(arr, n, x) + 1;` `        ``return` `count;` `    ``}` `    `  `    ``// Driver code` `    ``public` `static` `void` `Main () ` `    ``{` `        ``int` `[]arr = {1, 4, 4, 9, 10, 3};` `        ``int` `n = arr.Length;` `    `  `        ``// Preprocess array` `        ``Array.Sort(arr);` `    `  `        ``// Answer queries` `        ``int` `i = 1, j = 4;` `        ``Console.WriteLine(countInRange(arr, n, i, j)); ;` `    `  `        ``i = 9;` `        ``j = 12;` `        ``Console.WriteLine(countInRange(arr, n, i, j));` `    `    `    ``}` `}`   `// This code is contributed by vt_m.`

## PHP

 `= x ` `function` `lowerIndex(``\$arr``, ``\$n``, ``\$x``) ` `{ ` `    ``\$l` `= 0; ``\$h` `= ``\$n` `- 1; ` `    ``while` `(``\$l` `<= ``\$h``)` `    ``{ ` `        ``\$mid` `= (``\$l` `+ ``\$h``) / 2; ` `        ``if` `(``\$arr``[``\$mid``] >= ``\$x``) ` `            ``\$h` `= ``\$mid` `- 1; ` `        ``else` `            ``\$l` `= ``\$mid` `+ 1; ` `    ``} ` `    ``return` `\$l``; ` `} `   `// function to find last index <= y ` `function` `upperIndex(``\$arr``, ``\$n``, ``\$y``) ` `{ ` `    ``\$l` `= 0; ``\$h` `= ``\$n` `- 1; ` `    ``while` `(``\$l` `<= ``\$h``) ` `    ``{ ` `        ``\$mid` `= (``\$l` `+ ``\$h``) / 2; ` `        ``if` `(``\$arr``[``\$mid``] <= ``\$y``) ` `            ``\$l` `= ``\$mid` `+ 1; ` `        ``else` `            ``\$h` `= ``\$mid` `- 1; ` `    ``} ` `    ``return` `\$h``; ` `} `   `// function to count elements ` `// within given range ` `function` `countInRange(``\$arr``, ``\$n``, ``\$x``, ``\$y``) ` `{ ` `    ``// initialize result ` `    ``\$count` `= 0; ` `    ``\$count` `= (upperIndex(``\$arr``, ``\$n``, ``\$y``) - ` `              ``lowerIndex(``\$arr``, ``\$n``, ``\$x``) + 1);` `    ``\$t` `= ``floor``(``\$count``);` `    ``return` `\$t``; ` `} `   `// Driver Code`   `\$arr` `= ``array``( 1, 4, 4, 9, 10, 3 ); ` `\$n` `= sizeof(``\$arr``); `   `// Preprocess array ` `sort(``\$arr``); `   `// Answer queries ` `\$i` `= 1; ``\$j` `= 4; ` `echo` `countInRange(``\$arr``, ``\$n``, ``\$i``, ``\$j``), ``"\n"``; `   `\$i` `= 9; ``\$j` `= 12; ` `echo` `countInRange(``\$arr``, ``\$n``, ``\$i``, ``\$j``), ``"\n"``; `   `// This code is contributed by Sachin` `?>`

## Javascript

 ``

Output

```4
2```

Time Complexity: O(n log n),
Auxiliary Space: O(1)