题目描述
输入$n(n≤10^6)$个不超过$10^9$的单调不减的(就是后面的数字不小于前面的数字)非负整数$a_1, a_2, ..., a_n$,然后进行$m(m≤10^5)$次询问。对于每次询问,给出一个整数$q(q≤10^9)$,要求输出序列中第一个大于该数的位置。如果没有这样的位置,请输出-1
。
输入描述
第一行2个整数,表示数字个数n和询问次数m。
第二行n个整数,表示这些待查询的数字。
第三行m个整数,表示询问这些数字的编号,从1开始编号。
输出描述
m个整数表示答案。
输入样例
11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 20
输出样例
2 5 -1
//解答代码
#include <cstdio>
#include <iostream>
using namespace std;
int bsearch(int a[], int n, int target){
int low = 1;
int high = n;
while (low < high) {
int mid = low + (high -low)/ 2 ;
if (a[mid] > target)
high = mid;
else
low = mid + 1;
}
return a[high]>target?high:-1;
}
int nums[1000010];
int main(){
int n, m, target;
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d", &nums[i]);
for (int i = 1; i <= m; i++){
scanf("%d", &target);
printf("%d ", bsearch(nums, n, target));
}
return 0;
}