P2249 【深基13.例1】查找

https://www.luogu.com.cn/problem/P2249

方法一:二分手写模板

#include<bits/stdc++.h>
using namespace std;
int n, m, a[1000005], q;
int seach(int x){
	int ret=-1;
	int l=1, r=n;
	while(l<=r){
		int mid=r-(r-l)/2;
		if(a[mid]==x){
			ret=mid;
			r=mid-1;
		}
		else if(a[mid]>x)r=mid-1;
		else l=mid+1;
	}
	return ret;
}

int main()
{
	
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>a[i];
	while(m--){
		cin>>q;
		cout<<seach(q)<<" ";
	}
	
	return 0;
}

方法二:STL之lower_bound练习

#include<bits/stdc++.h>
using namespace std;
int n, m, a[1000005], q;

int main()
{
	
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>a[i];
	while(m--){
		cin>>q;
		int ans=lower_bound(a+1, a+1+n, q)-a;
		ans=a[ans]==q?ans:-1;//判断是否相等,不相等说明是不存在的
		cout<<ans<<" ";
	}
	
	return 0;
}

  

原文地址:https://www.cnblogs.com/tflsnoi/p/13188260.html