Thursday, September 8, 2016

Binary Search

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

Search This Blog