序号:1527
找第一个不小于k的数
Time Limit:1s Memory Limit:512MB
题目描述:
给定n个有序的数(编号从0到n-1)和m次查询,每次查询给定一个整数k,请找第一个大于等于k的元素并返回它的下标,如果不存在则返回n。
输入格式:
第一行为两个正整数 n, m,表示数组长度和查询次数。
第二行为 n 个正整数,表示给定的数。
第三行为 m 个正整数,表示查询的数。
输出格式:
一行 m 个数,表示查询结果。
输入样例:
6 5
2 3 4 4 8 13
2 4 8 6 15
输出样例:
0 2 4 4 6
#include<bits/stdc++.h>
using namespace std;
long long a[1010100],n,l,r,k,mid;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
while(k--){
long long x;
cin>>x;
l=1;
r=n;
while(l<r){
mid=(l+r)/2;
if(x<=a[mid]){
r=mid;
}else{
l=mid+1;
}
}
if(a[l]>=x){
cout<<l-1<<" ";
}else{
cout<<n<<" ";
}
}
return 0;
}
题外注:本题题目最后还有一个留空的“样例解释”,这里没有贴上来。