M--二分查找

来源:互联网 发布:windows加入域 编辑:程序博客网 时间:2024/06/17 11:49

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

对于每次询问,输出一个整数代表答案。

Example Input

51 3 5 7 93158

Example Output

13-1

Hint

= =分享个关于二分查找的连接http://blog.csdn.net/luckyxiaoqiang/article/details/8937978

---------------

源代码:

#include<stdio.h>int a[3000002];int find(int b,int c,int n){int mid;mid=(b+c)/2;if(b<=c){if(a[mid]>n) return (find(b,mid-1,n));else if(a[mid]==n) return mid;else if(a[mid]<n) return (find(mid+1,c,n));}else return (-1);}int main(){int n,m,i,j,q;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a[i]);}scanf("%d",&q);for(j=1;j<=q;j++){scanf("%d",&m);printf("%d\n",find(1,n,m));}return 0;}


0 0