题目描述
给出N个已经从小到大排好的有序整数序列(可能会有相同的数字),然后有M次询问,每次询问一个数字X, 表示需要找出整数序列中第一个大于或等于整数x的数在整数序列中的位置。
输入描述
第一行两个整数N和M(1<=M<=N<=100000),分别表示有序整数序列数字的个数和询问的次数。 接下来一行一共有N个整数,表示整数序列上的数字,保证数字是有序的。 最后M行,每行一个整数表示要询问的数字x。
输出描述
对于每个询问都输出一个对应的结果,数据保证每个询问都有解。
样例输入
5 2 1 3 3 7 9 6 3
样例输出:
4 2 答案_
#include<bits/stdc++.h>
using namespace std;
int b(int n[], int s, int t) {
int left = 0, right = s - 1;
int r=-1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (n[mid] >= t) {
r = mid + 1;
right = mid - 1;
} else {
left = mid + 1;
}
}
return r;
}
int main() {
int N,M;
cin>>N>>M;
int n[N];
for (int i=0;i<N;++i) {
cin>>n[i];
}
for (int i=0;i<M;++i) {
int x;
cin>>x;
cout<<b(n,N,x)<<endl;
}
return 0;
}