二分查找80分

#include<bits/stdc++.h>
using namespace std;
int n,a[100000];
int main()
{
  cin >> n;
  for(int i = 0;i < n;i++)
  {
    cin >> a[i];
  }
  int m;
  while(cin >> m)
  {
    int l = 0,r=n-1;
    bool tmp = 1;
    while(l<r)
    {
      int mid = (r-l)/2+l;
      if(a[mid]>m)
      {
        r=mid;
      }
      else if(a[mid]==m)
      {
        r=mid;
        tmp = 0;
      }
      else
      {
        l=mid+1;
      }
    }
    if(tmp)
    {
      cout << "0 ";
    }
    else
    {
      cout << l+1 << " ";
    }
  }
  return 0;
}```

放题目

2 个赞

题目描述
二分查找:输入
n
n 个从小到大的有序数,使用二分查找给定数
m
m 是否存在,如果有该数,则从左到右输出第一次出现的位置(计数从1开始),如果没有这样的数输出 0。需要查找多组数据。

输入格式
第一行一个整数
n
n,第二行
n
n 个整数
a
i
a
i

表示要查找的有序数列,第三行若干个整数
m
i
m
i

表示要查找的数字(最多有
S
S 个)。

输出格式
对于每一个
m
i
m
i

,输出它第一次出现的位置,用空格间隔,如果不存在,则输出 0。

1 个赞

r改成n,l改成-1

1 个赞