首页 > 电脑

二分查找C++的问题

更新时间2021-05-09 01:06:05

题目描述:
给出有n个元素的由小到大的序列,请你编程找出每次询问的某元素第一次出现的位置,共询问m次。(n<=2,000,000,m<=100,000,序列中的数值均小于10^5)
 
输入格式:
一个整数n,表示由小到大序列元素个数;
第二行有n个整数;
第三行一个整数,表示询问的次数m;
接着有m行,每行一个整数x,表示待查找的元素;
 
输出格式:
针对每次询问,如果x在序列中,则输出x第一次出现的位置,否则输出-1。
每个询问单独输出一行。
 
样例输入:
5
3 5 6 6 7
1
6
样例输出:
3
有没有AC的答案啊,代码一直超时,求!!!

试试以下程序(34563478562783452785423785423785437856823):

#include <iostream> int a[2000000]; ///全变量,可提高效率 int n; using namespace std; int BinSearch(int k) {    int low=0,high=n-1;    int mid;    while(low<=high)    {        mid=(low+high)/2;        if(k<a[mid])            high=mid-1;        else if(k>a[mid])            low=mid+1;        else            return mid+1;    }    return -1; } int main() {    int i,m,k;    cin >> n;    for(i=0;i<n;i++)        cin >> a[i];    cin >> m;    for(i=0;i<m;i++)    {        cin >> k;        cout << BinSearch(k) << endl;    }    return 0; }

上一篇:怎么解决:控制离开当前方法之前必须对out参数“choice”赋值?

下一篇:excel中如何让一串数字某个值对应另外一个值