#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int a[100];
//在数组里找到第一个大于pp的数
int search(int l, int r, int pp){
int res = -1;
while(l <= r){
int mid = (l+r) / 2;
if(a[mid] > pp){
res = mid;
r = mid-1;
}
else
l = mid + 1;
}
return res;
}
//在数组里找到第一个大于等于pp的数
int search(int l, int r, int pp){
int res = -1;
while(l <= r){
int mid = (l+r) / 2;
if(a[mid] >= pp){
res = mid;
r = mid - 1;
}
else
l = mid + 1;
}
return res;
}
/*最后一个小于x的位置 == 第一个大于等于x的位置-1
如果第一个大于等于x的位置为1的话,就说明没有数比x小
最后一个小于等于x的位置 == 第一个大于x的位置-1(如果存在的话)
同样如果第一个大于x的位置为1的话,就说明没有数比x小*/
int main(){
int n, i, m;
while(scanf("%d%d", &n, &m)!=EOF){
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(a+1, a+1+n);
int pp;
for(i = 1; i <= m; i++){
scanf("%d", &pp);
int pos = search(1, n, pp);
if(pos != -1)
printf("%d\n", a[pos]);
else
printf("-1\n");
}
}
return 0;
}
二分查找
最新推荐文章于 2023-05-28 13:59:52 发布