Open In App

# Mean of range in array

Given an array of n integers. You are given q queries. Write a program to print floor value of mean in range l to r for each query in a new line.

Examples :

```Input : arr[] = {1, 2, 3, 4, 5}
q = 3
0 2
1 3
0 4
Output : 2
3
3
Here for 0 to 2 (1 + 2 + 3) / 3 = 2

Input : arr[] = {6, 7, 8, 10}
q = 2
0 3
1 2
Output : 7
7```
Recommended Practice

Naive Approach: We can run loop for each query l to r and find sum and number of elements in range. After this we can print floor of mean for each query.

## C++

 `// CPP program to find floor value``// of mean in range l to r``#include ``using` `namespace` `std;` `// To find mean of range in l to r``int` `findMean(``int` `arr[], ``int` `l, ``int` `r)``{``    ``// Both sum and count are``    ``// initialize to 0``    ``int` `sum = 0, count = 0;` `    ``// To calculate sum and number``    ``// of elements in range l to r``    ``for` `(``int` `i = l; i <= r; i++) {``        ``sum += arr[i];``        ``count++;``    ``}` `    ``// Calculate floor value of mean``    ``int` `mean = ``floor``(sum / count);` `    ``// Returns mean of array``    ``// in range l to r``    ``return` `mean;``}` `// Driver program to test findMean()``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``cout << findMean(arr, 0, 2) << endl;``    ``cout << findMean(arr, 1, 3) << endl;``    ``cout << findMean(arr, 0, 4) << endl;``    ``return` `0;``}`

## C

 `// C program to find floor value``// of mean in range l to r``#include ``#include ` `// To find mean of range in l to r``int` `findMean(``int` `arr[], ``int` `l, ``int` `r)``{``    ``// Both sum and count are``    ``// initialize to 0``    ``int` `sum = 0, count = 0;` `    ``// To calculate sum and number``    ``// of elements in range l to r``    ``for` `(``int` `i = l; i <= r; i++) {``        ``sum += arr[i];``        ``count++;``    ``}` `    ``// Calculate floor value of mean``    ``int` `mean = ``floor``(sum / count);` `    ``// Returns mean of array``    ``// in range l to r``    ``return` `mean;``}` `// Driver program to test findMean()``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``printf``(``"%d\n"``,findMean(arr, 0, 2));``    ``printf``(``"%d\n"``,findMean(arr, 1, 3));``    ``printf``(``"%d\n"``,findMean(arr, 0, 4));``    ``return` `0;``}` `// This code is contributed by kothavvsaakash`

## Java

 `// Java program to find floor value``// of mean in range l to r``import` `java.io.*;` `public` `class` `Main {` `    ``// To find mean of range in l to r``    ``static` `int` `findMean(``int` `arr[], ``int` `l, ``int` `r)``    ``{``        ``// Both sum and count are``        ``// initialize to 0``        ``int` `sum = ``0``, count = ``0``;` `        ``// To calculate sum and number``        ``// of elements in range l to r``        ``for` `(``int` `i = l; i <= r; i++) {``            ``sum += arr[i];``            ``count++;``        ``}` `        ``// Calculate floor value of mean``        ``int` `mean = (``int``)Math.floor(sum / count);` `        ``// Returns mean of array``        ``// in range l to r``        ``return` `mean;``    ``}` `    ``// Driver program to test findMean()``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5` `};``        ``System.out.println(findMean(arr, ``0``, ``2``));``        ``System.out.println(findMean(arr, ``1``, ``3``));``        ``System.out.println(findMean(arr, ``0``, ``4``));``    ``}``}`

## Python3

 `# Python 3 program to find floor value``# of mean in range l to r``import` `math` `# To find mean of range in l to r``def` `findMean(arr, l, r):``    ` `    ``# Both sum and count are``    ``# initialize to 0``    ``sum``, count ``=` `0``, ``0``    ` `    ``# To calculate sum and number``    ``# of elements in range l to r``    ``for` `i ``in` `range``(l, r ``+` `1``):``        ``sum` `+``=` `arr[i]``        ``count ``+``=` `1` `    ``# Calculate floor value of mean``    ``mean ``=` `math.floor(``sum` `/` `count)` `    ``# Returns mean of array``    ``# in range l to r``    ``return` `mean` `# Driver Code``arr ``=` `[ ``1``, ``2``, ``3``, ``4``, ``5` `]``    ` `print``(findMean(arr, ``0``, ``2``))``print``(findMean(arr, ``1``, ``3``))``print``(findMean(arr, ``0``, ``4``))` `# This code is contributed``# by PrinciRaj1992`

## C#

 `//C# program to find floor value``// of mean in range l to r``using` `System;` `public` `class` `GFG {`` ` `    ``// To find mean of range in l to r``    ``static` `int` `findMean(``int` `[]arr, ``int` `l, ``int` `r)``    ``{``        ``// Both sum and count are``        ``// initialize to 0``        ``int` `sum = 0, count = 0;`` ` `        ``// To calculate sum and number``        ``// of elements in range l to r``        ``for` `(``int` `i = l; i <= r; i++) {``            ``sum += arr[i];``            ``count++;``        ``}`` ` `        ``// Calculate floor value of mean``        ``int` `mean = (``int``)Math.Floor((``double``)sum / count);`` ` `        ``// Returns mean of array``        ``// in range l to r``        ``return` `mean;``    ``}`` ` `    ``// Driver program to test findMean()``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = { 1, 2, 3, 4, 5 };``        ``Console.WriteLine(findMean(arr, 0, 2));``        ``Console.WriteLine(findMean(arr, 1, 3));``        ``Console.WriteLine(findMean(arr, 0, 4));``    ``}``}` `/*This code is contributed by PrinciRaj1992*/`

## PHP

 ``

## Javascript

 ``

Output

```2
3
3
```

Time complexity: O(n*q) where q is the number of queries and n is the size of the array. Here in the above code q is 3 as the findMean function is used 3 times.
Auxiliary Space: O(1)

Efficient Approach: We can find sum of numbers using prefix sum. The prefixSum[i] denotes the sum of first i elements. So sum of numbers in range l to r will be prefixSum[r] – prefixSum[l-1]. Number of elements in range l to r will be r – l + 1. So we can now print mean of range l to r in O(1).

## C++

 `// CPP program to find floor value``// of mean in range l to r``#include ``#define MAX 1000005``using` `namespace` `std;` `int` `prefixSum[MAX];` `// To calculate prefixSum of array``void` `calculatePrefixSum(``int` `arr[], ``int` `n)``{``    ``// Calculate prefix sum of array``    ``prefixSum[0] = arr[0];``    ``for` `(``int` `i = 1; i < n; i++)``        ``prefixSum[i] = prefixSum[i - 1] + arr[i];``}` `// To return floor of mean``// in range l to r``int` `findMean(``int` `l, ``int` `r)``{``    ``if` `(l == 0)``      ``return` `floor``(prefixSum[r]/(r+1));` `    ``// Sum of elements in range l to``    ``// r is prefixSum[r] - prefixSum[l-1]``    ``// Number of elements in range``    ``// l to r is r - l + 1``    ``return` `floor``((prefixSum[r] -``          ``prefixSum[l - 1]) / (r - l + 1));``}` `// Driver program to test above functions``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``calculatePrefixSum(arr, n);``    ``cout << findMean(0, 2) << endl;``    ``cout << findMean(1, 3) << endl;``    ``cout << findMean(0, 4) << endl;``    ``return` `0;``}`

## Java

 `// Java program to find floor value``// of mean in range l to r``import` `java.io.*;` `public` `class` `Main {``public` `static` `final` `int` `MAX = ``1000005``;``    ``static` `int` `prefixSum[] = ``new` `int``[MAX];` `    ``// To calculate prefixSum of array``    ``static` `void` `calculatePrefixSum(``int` `arr[], ``int` `n)``    ``{``        ``// Calculate prefix sum of array``        ``prefixSum[``0``] = arr[``0``];``        ``for` `(``int` `i = ``1``; i < n; i++)``            ``prefixSum[i] = prefixSum[i - ``1``] + arr[i];``    ``}` `    ``// To return floor of mean``    ``// in range l to r``    ``static` `int` `findMean(``int` `l, ``int` `r)``    ``{``        ``if` `(l == ``0``)``           ``return` `(``int``)Math.floor(prefixSum[r] / (r + ``1``));``        ` `        ``// Sum of elements in range l to``        ``// r is prefixSum[r] - prefixSum[l-1]``        ``// Number of elements in range``        ``// l to r is r - l + 1``        ``return` `(``int``)Math.floor((prefixSum[r] -``                ``prefixSum[l - ``1``]) / (r - l + ``1``));``    ``}` `    ``// Driver program to test above functions``    ``public` `static` `void` `main(String[] args)``    ``{``        ``int` `arr[] = { ``1``, ``2``, ``3``, ``4``, ``5` `};``        ``int` `n = arr.length;``        ``calculatePrefixSum(arr, n);``        ``System.out.println(findMean(``1``, ``2``));``        ``System.out.println(findMean(``1``, ``3``));``        ``System.out.println(findMean(``1``, ``4``));``    ``}``}`

## Python3

 `# Python3 program to find floor value``# of mean in range l to r``import` `math as mt` `MAX` `=` `1000005``prefixSum ``=` `[``0` `for` `i ``in` `range``(``MAX``)]` `# To calculate prefixSum of array``def` `calculatePrefixSum(arr, n):` `    ``# Calculate prefix sum of array``    ``prefixSum[``0``] ``=` `arr[``0``]` `    ``for` `i ``in` `range``(``1``,n):``        ``prefixSum[i] ``=` `prefixSum[i ``-` `1``] ``+` `arr[i]` `# To return floor of mean``# in range l to r``def` `findMean(l, r):` `    ``if` `(l ``=``=` `0``):``        ``return` `mt.floor(prefixSum[r] ``/` `(r ``+` `1``))` `    ``# Sum of elements in range l to``    ``# r is prefixSum[r] - prefixSum[l-1]``    ``# Number of elements in range``    ``# l to r is r - l + 1``    ``return` `(mt.floor((prefixSum[r] ``-``                      ``prefixSum[l ``-` `1``]) ``/``                          ``(r ``-` `l ``+` `1``)))` `# Driver Code``arr ``=` `[``1``, ``2``, ``3``, ``4``, ``5``]` `n ``=` `len``(arr)` `calculatePrefixSum(arr, n)``print``(findMean(``0``, ``2``))``print``(findMean(``1``, ``3``))``print``(findMean(``0``, ``4``))` `# This code is contributed by Mohit Kumar`

## C#

 `// C# program to find floor value``// of mean in range l to r``using` `System;``                    ` `public` `class` `GFG {``public` `static` `readonly` `int` `MAX = 1000005;``    ``static` `int` `[]prefixSum = ``new` `int``[MAX];`` ` `    ``// To calculate prefixSum of array``    ``static` `void` `calculatePrefixSum(``int` `[]arr, ``int` `n)``    ``{``        ``// Calculate prefix sum of array``        ``prefixSum[0] = arr[0];``        ``for` `(``int` `i = 1; i < n; i++)``            ``prefixSum[i] = prefixSum[i - 1] + arr[i];``    ``}`` ` `    ``// To return floor of mean``    ``// in range l to r``    ``static` `int` `findMean(``int` `l, ``int` `r)``    ``{``        ``if` `(l == 0)``           ``return` `(``int``)Math.Floor((``double``)(prefixSum[r] / (r + 1)));``         ` `        ``// Sum of elements in range l to``        ``// r is prefixSum[r] - prefixSum[l-1]``        ``// Number of elements in range``        ``// l to r is r - l + 1``        ``return` `(``int``)Math.Floor((``double``)(prefixSum[r] -``                ``prefixSum[l - 1]) / (r - l + 1));``    ``}`` ` `    ``// Driver program to test above functions``    ``public` `static` `void` `Main()``    ``{``        ``int` `[]arr = { 1, 2, 3, 4, 5 };``        ``int` `n = arr.Length;``        ``calculatePrefixSum(arr, n);``        ``Console.WriteLine(findMean(1, 2));``        ``Console.WriteLine(findMean(1, 3));``        ``Console.WriteLine(findMean(1, 4));``    ``}``}` `//This code is contributed by PrinciRaj1992`

## Javascript

 ``

## C

 `// C program to find floor value``// of mean in range l to r``#include ``#include ` `#define MAX 1000005` `int` `prefixSum[MAX];` `// To calculate prefixSum of array``void` `calculatePrefixSum(``int` `arr[], ``int` `n)``{``    ``// Calculate prefix sum of array``    ``prefixSum[0] = arr[0];``    ``for` `(``int` `i = 1; i < n; i++)``        ``prefixSum[i] = prefixSum[i - 1] + arr[i];``}` `// To return floor of mean``// in range l to r``int` `findMean(``int` `l, ``int` `r)``{``    ``if` `(l == 0)``      ``return` `floor``(prefixSum[r]/(r+1));` `    ``// Sum of elements in range l to``    ``// r is prefixSum[r] - prefixSum[l-1]``    ``// Number of elements in range``    ``// l to r is r - l + 1``    ``return` `floor``((prefixSum[r] -``          ``prefixSum[l - 1]) / (r - l + 1));``}` `// Driver program to test above functions``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 4, 5 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);``    ``calculatePrefixSum(arr, n);``    ``printf``(``"%d\n"``,findMean(0, 2));``    ``printf``(``"%d\n"``,findMean(1, 3));``    ``printf``(``"%d\n"``,findMean(0, 4));``    ``return` `0;``}`

Output

```2
3
3
```

Time complexity: O(n+q) where q is the number of queries and n is the size of the array. Here in the above code q is 3 as the findMean function is used 3 times.
Auxiliary Space: O(k) where k=1000005.

This article is contributed by nuclode. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.