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.
Constraints
1<=N<=10^5
1<=A[i]<=10^9
1<=q<=10^5
1<=x<=10^9
Sol :
Code :
#include<iostream>
#include<algorithm>
using namespace std;
int binary_search(long long int arr[], int l, int r, int x){
while(l<=r){
int m;
m = l + (r-l)/2;
if(arr[m] == x)
return m;
if(arr[m]<x)
l = m+1;
else
r = m-1;
}
return -1;
}
int main(){
long long int n, i;
cin>>n;
long long int a[n];
for(i=0;i<n;i++){
cin>>a[i];
}
sort(a, a+n);
long long int query;
cin>>query;
long long int x;
while(query--){
cin>>x;
long long int result;
result = binary_search(a, 0, n-1, x);
cout<<result+1<<endl;
}
return 0;
}
No comments:
Post a Comment