二分模板 = - =

#include"bits/stdc++.h"

using namespace std;
int s[105];
int n,a;
//ss函数 返回的是查找数等于或者大于的第一个数
int ss(int x){		
	int l = 1 , r = n;
	int mid = (l+r)/2;
	while(l<=r)
	{
		if(s[mid] < x){
			l=mid+1;
		}else if(s[mid] > x){
			r=mid-1;
		}else{
			return mid;
		}
		mid = (l+r)/2;
	}
	return l;
}
int main()
{
	while(cin >> n)
	{
		for(int i=1;i<=n;i++) cin >> s[i];
		cin >> a;
		cout << ss(a) << " " << s[ss(a)] << endl;
		// 二分函数  lower_bound(),upper_bound()
        /*	lower_bound(起始地址,结束地址,要查找的数值)
			返回第一个(大于等于)所要查找的元素的地址
			适合求一个数组里比该数小的个数
			upper_bound(起始地址,结束地址,要查找的数值)
			返回第一个(大于)所要查找的元素的地址
			适合求一个数组里比该个数大的个数	*/
    	int j = lower_bound(s+1,s+1+n,a)-s;
		int k = upper_bound(s+1,s+1+n,a)-s;
		cout << j <<" " << s[j] << " " << k << " " << s[k] << endl;
    }
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_53013914/article/details/120490773