#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 个赞