Binary Search
Rank It
You have been given an array A consisting of N integers. All the elements in this array A are unique. You have to answer some queries based on the elements of this array. Each query will consist of a single integer x. You need to print the rank based position of this element in this array considering that the array is 1 indexed. The rank based position of an element in an array is its position in the array when the array has been sorted in ascending order.
Note: It is guaranteed that all the elements in this array are unique and for each x belonging to a query, value x shall exist in the array
Input Format
The first line consists of a single integer N denoting the size of array A. The next line contains N unique integers, denoting the content of array A. The next line contains a single integer q denoting the number of queries. Each of the next q lines contains a single integer x denoting the element whose rank based position needs to be printed.
Output Format
You need to print q integers denoting the answer to each query.
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int binarySearch(int A[], int low, int high, int x) {
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (A[mid] < x)
low = mid + 1;
else if (A[mid] > x)
high = mid - 1;
else if (A[mid] == x)
break;
}
return mid;
}
int main() {
int size;
cin >> size;
int A[size];
for (int i = 0; i < size; i++) {
cin >> A[i];
}
sort(A, A + size);
int q;
cin >> q;
while (q--) {
int x, rank;
cin >> x;
rank = binarySearch(A, 0, size - 1, x);
cout << rank + 1 << endl;
}
return 0;
}
Last updated
Was this helpful?