Given an array of integers greater[] in which every value of array represent how many elements are greater to it’s on right side in an unknown array arr[]. Our task is to generate original array arr[]. It may be assumed that the original array contains elements in range from 1 to n and all elements are unique

**Examples:**

Input : greater[] = { 6, 3, 2, 1, 0, 0, 0 } Output : arr[] = [ 1, 4, 5, 6, 7, 3, 2 ] Input : greater[] = { 0, 0, 0, 0, 0 } Output : arr[] = [ 5, 4, 3, 2, 1 ]

We consider an array of elements temp[] = {1, 2, 3, 4, .. n}. We know value of greater[0] indicates count of elements greater than arr[0]. We can observe that **(n – greater[0])-th ** element of temp[] can be put at arr[0]. So we put this at arr[0] and remove this from temp[]. We repeat above process for remaining elements. For every element greater[i], we put (n – greater[i] – i)-th element of temp[] in arr[i] and remove it from temp[].

Below is the implementation of above idea

## C++

`// C++ program to generate original array ` `// from an array that stores counts of ` `// greater elements on right. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `void` `originalArray(` `int` `greater[], ` `int` `n) ` `{ ` ` ` `// Array that is used to include every ` ` ` `// element only once ` ` ` `vector<` `int` `> temp; ` ` ` `for` `(` `int` `i = 0; i <= n; i++) ` ` ` `temp.push_back(i); ` ` ` ` ` `// Traverse the array element ` ` ` `int` `arr[n]; ` ` ` `for` `(` `int` `i = 0; i < n; i++) { ` ` ` ` ` `// find the K-th (n-greater[i]-i) ` ` ` `// smallest element in Include_Array ` ` ` `int` `k = n - greater[i] - i; ` ` ` ` ` `arr[i] = temp[k]; ` ` ` ` ` `// remove current k-th element ` ` ` `// from Include array ` ` ` `temp.erase(temp.begin() + k); ` ` ` `} ` ` ` ` ` `// print resultant array ` ` ` `for` `(` `int` `i = 0; i < n; i++) ` ` ` `cout << arr[i] << ` `" "` `; ` `} ` ` ` `// driver program to test above function ` `int` `main() ` `{ ` ` ` `int` `Arr[] = { 6, 3, 2, 1, 0, 1, 0 }; ` ` ` `int` `n = ` `sizeof` `(Arr) / ` `sizeof` `(Arr[0]); ` ` ` `originalArray(Arr, n); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 program original array from an

# array that stores counts of greater

# elements on right

def originalArray(greater, n):

# array that is used to include

# every element only once

temp = []

for i in range(n + 1):

temp.append(i)

# traverse the array element

arr = [0 for i in range(n)]

for i in range(n):

# find the Kth (n-greater[i]-i)

# smallest element in Include_array

k = n – greater[i] – i

arr[i] = temp[k]

# remove current kth element

# from include array

del temp[k]

for i in range(n):

print(arr[i], end = ” “)

# Driver code

arr = [6, 3, 2, 1, 0, 1, 0]

n = len(arr)

originalArray(arr, n)

# This code is contributed

# by Mohit Kumar

**Output:**

1 4 5 6 7 2 3

**Time Complexity :** (n^{2}) (Erase operation takes O(n) in vector)

## Recommended Posts:

- Find original array from encrypted array (An array of sums of other elements)
- Queries for counts of array elements with values in given range
- Find k maximum elements of array in original order
- Print n smallest elements from given array in their original order
- Find minimum value to assign all array elements so that array product becomes greater
- Count subarrays having total distinct elements same as original array
- Find all elements in array which have at-least two greater elements
- Smallest greater elements in whole array
- Sum of elements in an array with frequencies greater than or equal to that element
- Adding elements of an array until every element becomes greater than or equal to k
- Noble integers in an array (count of greater elements is equal to value)
- Rearrange array such that even index elements are smaller and odd index elements are greater
- Queries for counts of multiples in an array
- Minimum time to return array to its original state after given modifications
- Check if there exist two elements in an array whose sum is equal to the sum of rest of the array

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.