Given a **2D** array of size N containing distinct height of people standing in a queue, and a number corresponding to each person (P) that gives the number of persons who are shorter than P and standing in front of P. The task is to determine the distance between two people **A** and **B** in the actual order of people’s height.

**Example:**

Input:A = 6, B = 5, arr[][] = {{5, 0}, {3, 0}, {2, 0},

{6, 4}, {1, 0}, {4, 3}}

Output:4

Actual arrangement of people’s height

{5, 0}, {3, 0}, {2, 0}, {1, 0}, {6, 4}, {4, 3}

Distance between 6 and 5 is 4

Input:A = 1, B = 3, arr[][] = {{3, 0}, {1, 0}, {2, 1}};

Output:1

**Naive Approach:** A brute force approach is to try out all possible permutation of the given heights of the order of the phoenix members, and verify if the in front numbers match for the given sequence, then find the distance between two people.

**Time Complexity:** O(N!)

**Efficient Approach:** Another approach is to store person height and it’s front value, store it in any vector and sort the vector according to heights in ascending order. Now, traverse the vector and insert the person at the kth position in the position vector where k is the number of people standing in front of the people of the current person.

Below is the implementation of the above approach:

## CPP

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to find the correct order and then ` `// return the distance between the two persons ` `int` `getDistance(` `int` `arr[][2], ` `int` `n, ` `int` `a, ` `int` `b) ` `{ ` ` ` `vector<pair<` `int` `, ` `int` `> > vp; ` ` ` ` ` `// Make pair of both height & infront ` ` ` `// and insert to vector ` ` ` `for` `(` `int` `i = 0; i < n; i++) { ` ` ` `vp.push_back({ arr[i][0], arr[i][1] }); ` ` ` `} ` ` ` ` ` `// Sort the vector in ascending order ` ` ` `sort(vp.begin(), vp.end()); ` ` ` ` ` `// Find the correct place for every person ` ` ` `vector<` `int` `> pos; ` ` ` ` ` `// Insert into postion vector ` ` ` `// according to infront value ` ` ` `for` `(` `int` `i = 0; i < vp.size(); i++) { ` ` ` `int` `height = vp[i].first; ` ` ` `int` `k = vp[i].second; ` ` ` `pos.insert(pos.begin() + k, height); ` ` ` `} ` ` ` ` ` `int` `first = -1, second = -1; ` ` ` ` ` `for` `(` `int` `i = 0; i < pos.size(); i++) { ` ` ` `if` `(pos[i] == a) ` ` ` `first = i; ` ` ` `if` `(pos[i] == b) ` ` ` `second = i; ` ` ` `} ` ` ` ` ` `return` `abs` `(first - second); ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `int` `arr[][2] = { ` ` ` `{ 5, 0 }, ` ` ` `{ 3, 0 }, ` ` ` `{ 2, 0 }, ` ` ` `{ 6, 4 }, ` ` ` `{ 1, 0 }, ` ` ` `{ 4, 3 } ` ` ` `}; ` ` ` `int` `n = ` `sizeof` `(arr) / ` `sizeof` `(arr[0]); ` ` ` `int` `a = 6, b = 5; ` ` ` ` ` `cout << getDistance(arr, n, a, b); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python

`# Python implementation of the approach ` ` ` `# Function to find the correct order and then ` `# return the distance between the two persons ` `def` `getDistance(arr, n, a, b): ` ` ` `vp ` `=` `[] ` ` ` ` ` `# Make pair of both height & infront ` ` ` `# and insert to vector ` ` ` `for` `i ` `in` `range` `(n): ` ` ` `vp.append([arr[i][` `0` `], arr[i][` `1` `]]) ` ` ` ` ` `# Sort the vector in ascending order ` ` ` `vp ` `=` `sorted` `(vp) ` ` ` ` ` `# Find the correct place for every person ` ` ` `pos ` `=` `[` `0` `for` `i ` `in` `range` `(n)] ` ` ` ` ` `# Insert into postion vector ` ` ` `# according to infront value ` ` ` `for` `i ` `in` `range` `(` `len` `(vp)): ` ` ` `height ` `=` `vp[i][` `0` `] ` ` ` `k ` `=` `vp[i][` `1` `] ` ` ` `pos[k] ` `=` `height ` ` ` ` ` `first ` `=` `-` `1` ` ` `second ` `=` `-` `1` ` ` ` ` `for` `i ` `in` `range` `(n): ` ` ` `if` `(pos[i] ` `=` `=` `a): ` ` ` `first ` `=` `i ` ` ` `if` `(pos[i] ` `=` `=` `b): ` ` ` `second ` `=` `i ` ` ` ` ` `return` `abs` `(first ` `-` `second) ` ` ` `# Driver code ` `arr ` `=` `[[` `5` `, ` `0` `], ` ` ` `[` `3` `, ` `0` `], ` ` ` `[` `2` `, ` `0` `], ` ` ` `[` `6` `, ` `4` `], ` ` ` `[` `1` `, ` `0` `], ` ` ` `[` `4` `, ` `3` `]] ` `n ` `=` `len` `(arr) ` `a ` `=` `6` `b ` `=` `5` ` ` `print` `(getDistance(arr, n, a, b)) ` ` ` `# This code is contributed by mohit kumar 29 ` |

*chevron_right*

*filter_none*

**Output:**

4

**Time Complexity:** O(n^{2})

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:

- Maximize distance between any two consecutive 1's after flipping M 0's
- Find array sum using Bitwise OR after splitting given array in two halves after K circular shifts
- Check if a queue can be sorted into another queue using a stack
- Find the minimum distance between two numbers
- Binary Array Range Queries to find the minimum distance between two Zeros
- Maximum length of rod for Q-th person
- Maximum volume of cube for every person when edge of N cubes are given
- Maximum distance between two occurrences of same element in array
- Distance between two closest minimum
- Maximum distance between two points in coordinate plane using Rotating Caliper's Method
- Minimum distance between two occurrences of maximum
- Maximum distance between two unequal elements
- Maximize distance between two elements of Array by at most X swaps
- Maximum distance between two 1s in a Binary Array in a given range
- Minimum distance between any two equal elements in an Array
- Maximum distance between two elements whose absolute difference is K
- Maximum difference between two elements such that larger element appears after the smaller number
- Maximize difference between the Sum of the two halves of the Array after removal of N elements
- Find last two remaining elements after removing median of any 3 consecutive elements repeatedly
- Maximum sum possible for a sub-sequence such that no two elements appear at a distance < K in 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.