#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
long Search(long arr[],long target,long size)
{
long left = 0 , right = size -1;
while(left<=right)
{
long mid = (left +( right - left))/2;
if(target < arr[0])
{
return -1;
}
if( target == arr[0])
{
return arr[0];
}
if( target >= arr[right])
{
return arr[right];
}
if(left != 0 && target < arr[left] && target > arr[left-1])
{
return arr[left-1];
}
if(right != size-1 && target > arr[right] && target < arr[right+1])
{
return arr[right];
}
if(arr[mid] < target)
{
left = mid+1;
}
else if(arr[mid] > target)
{
right = mid -1;
}
else if(arr[mid] == target)
{
return arr[mid];
}
}
}
int main(void)
{
long n , m , t;
int i ,j = 0;
cin >> n >> m;
long a[n] , b[m];
for( i = 0 ; i < n ; i++)
{
cin >> a[i];
}
sort(&a[0] , &a[n]);//排序
for( i = 0 ; i < m ; i++)
{
scanf("%ld" , &t);
getchar();
b[j] = Search( a ,t , n);
j++;
}
for( j = 0 ; j < m ;j++)
{
printf("%d\n",b[j] );
}
return 0;
}
超时了改怎么解决啊, 在1000ms解决 ,我超时了1s😭
想要储存二分法查询的返回值到一个数组中 然后一并输出 因为不能接受一个判断值就输出一个
缩短在1s内