遞迴-M--二分查詢

HowieLee59發表於2019-03-30

Problem Description

給出含有n個數的升序序列,保證序列中的數兩兩不相等,這n個數編號從1 到n。

然後給出q次詢問,每次詢問給出一個數x,若x存在於此序列中,則輸出其編號,否則輸出-1。

Input

單組輸入。首先輸入一個整數n(1 <= n && n <= 3000000),接下的一行包含n個數。

再接下來的一行包含一個正整數q(1 <= q && q <= 10000),表示有q次詢問。

再接下來的q行,每行包含一個正整數x。

Output

對於每次詢問,輸出一個整數代表答案。

Sample Input

5
1 3 5 7 9
3
1
5
8

Sample Output

1
3
-1
#include<stdio.h>
#include<stdlib.h>

int a[10000001];


int search(int l,int r,int target){
    while(l <= r){
        int mid = (l + r) /2;
        if(a[mid] == target){
            return mid + 1;
        }else if(a[mid] < target){
            l = mid + 1;
        }else if(a[mid] > target){
            r = mid - 1;
        }
    }
    return -1;
}

int main(){
    int b,c,d;
    scanf("%d",&b);
    for(int i = 0 ; i < b ; i++){
        scanf("%d",&a[i]);
    }
    //sort(0,b-1);
    scanf("%d",&c);
    while(c--){
        scanf("%d",&d);
        printf("%d\n",search(0,b-1,d));
    }
    return 0;
}

 

相關文章