Write a function to count the number of smaller elements on the right of each element in an array. Given an unsorted array arr[] of distinct integers, construct another array countSmaller[] such that countSmaller[i] contains the count of smaller elements on right side of each element arr[i] in the array.

Examples:

Input : arr[] = {12, 1, 2, 3, 0, 11, 4} Output :countSmaller[] = {6, 1, 1, 1, 0, 1, 0} Input :arr[]={5, 4, 3, 2, 1} Output :countSmaller[]={4, 3, 2, 1, 0}

In this post an easy implementation of https://www.geeksforgeeks.org/count-smaller-elements-on-right-side/ is discussed.

Create an empty Set in C++ STL (Note that Set in C++ STL is implemented Self Balancing Binary Search Tree).

- Traverse the array element from i=len-1 to 0 and insert every element in a set.
- Find the first element that is lower than A[i] using lower_bound function.
- Find the distance between above found element and the beginning of the set using distance function.
- Store the distance in another array Lets say CountSmaller.
- Print that array .

`// CPP program to find count of smaller ` `// elements on right side using set in C++ ` `// STL. ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` `void` `countSmallerRight(` `int` `A[], ` `int` `len) ` `{ ` ` ` `set<` `int` `> s; ` ` ` `int` `countSmaller[len]; ` ` ` `for` `(` `int` `i = len - 1; i >= 0; i--) { ` ` ` `s.insert(A[i]); ` ` ` `auto` `it = s.lower_bound(A[i]); ` ` ` `countSmaller[i] = distance(s.begin(), it); ` ` ` `} ` ` ` ` ` `for` `(` `int` `i = 0; i < len; i++) ` ` ` `cout << countSmaller[i] << ` `" "` `; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `A[] = {12, 1, 2, 3, 0, 11, 4}; ` ` ` `int` `len = ` `sizeof` `(A) / ` `sizeof` `(` `int` `); ` ` ` `countSmallerRight(A, len); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

**Output:**

6 1 1 1 0 1 0

Note that the above implementation takes worst-case time complexity O(n^2) as the worst case time complexity of distance function is O(n) but the above implementation is very simple and works better than the naive algorithm in the average case.

Above approach works for unique elements but for duplicate elements just replace Set with Multiset.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Count smaller elements on right side and greater elements on left side using Binary Index Tree
- Count of smaller elements on right side of each element in an Array using Merge sort
- Count smaller elements on right side
- Find the farthest smaller number in the right side
- Delete array elements which are smaller than next or become smaller
- Count the number of elements which are greater than any of element on right side of an array
- Find the nearest smaller numbers on left side in an array
- Number of elements that can be seen from right side
- Replace every element of array with sum of elements on its right side
- Find maximum difference between nearest left and right smaller elements
- Count smaller primes on the right of each array element
- Count of array elements which is smaller than both its adjacent elements
- Replace every element with the greatest element on right side
- Steps to make array empty by removing maximum and its right side
- Smallest Greater Element on Right Side
- Ceiling in right side for every element in an array
- Count of Array elements greater than all elements on its left and at least K elements on its right
- Count of Array elements greater than all elements on its left and next K elements on its right
- Count greater elements on the left side of every array element
- Rearrange array such that even index elements are smaller and odd index elements are greater

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.