当前位置:首页 > 题解目录 > 正文内容

【题解】二分法查找左边界

亿万年的星光2年前 (2024-03-20)题解目录1939




参考代码:

# include <bits/stdc++.h>
using namespace std;
int a[100005]; 
int n,m,x; //数组大小,要查找的数大小,每次要查找的数 
int main()
{
//	freopen("1.in","r",stdin);
//	freopen("1.out","w",stdout);	
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	cin>>m;
	while(m--){
		cin>>x;
		int index=lower_bound(a+1,a+n+1,x)-a; //查找第一个大于等于m的位置 
		if(index==n+1){
			//没找到输出-1 
			cout<<-1<<" ";
		}else if(a[index]==x){
			//找到了,输出位置 
			cout<<index<<" "; 
		}else{
			//第一个大于但是不等于的情况也输出-1 
			cout<<-1<<" ";
		}
	} 
	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】亲戚

【题目描述】若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是...

【题解】转换字符串的最少操作次数

【题目描述】给你一个字符串 s ,由 n 个字符组成,每个字符不是 'X' 就是 'O' ...

【题解】变换数组

【题目描述】输入一个数组 a,包含有 n 个元素 a1,a2,⋯,an。对这个数组进行 m 次变换,每次变换会将数组 a ...

【题解】线段

【题目描述】在一个数轴上有n条线段,现选取其中k条线段使得这k条线段两两没有重合部分,问最大的k为多少?【输入描述】第一行为一个正整数n,下面n行每行2个数字ai,bi,描述每条线段。【输出描述】输出...

【题解】 二维数组转置

说明输入一个n行m列的数组,输出他的转置,具体来说输出的第i行第j个数字,应是输入的第j行第i个数字。1≤n≤20000;1≤m≤20000;1≤n∗m≤20000;1≤a[i][j]≤1000特别注...

【NOIP2000】计算器的改良

【题目描述】NCL 是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手 ZL...