#include<iostream>
#include<algorithm>
using namespace std;
int a[] = {1, 1, 1, 1, 1, 2, 3};
//把集合分成了 [l, mid], [mid + 1, r]两个部分 把mid分到了左边那个部分
//寻找的是等于x的最小的数的下标
int find1(int x)
{
int l = 0, r = 6;
while(l < r)
{
int mid = l + r >> 1;
if(a[mid] >= x)r = mid;
else l = mid + 1;
}
return l;
}
//把集合分成了[l, mid - 1], [mid, r]两个部分, 把mid 分到了右边的部分
//寻找的是小于x最大的数的下标
int find2(int x)
{
int l = 0, r = 6;
while(l < r)
{
int mid = l + r >> 1;
if(x > a[mid])l = mid;
else r = mid - 1;
}
return l;
}
int main()
{
//int t = find2(1);
int t = lower_bound(a, a + 6, 1) - a;//寻找的是等于x的最小的下标
cout << t << endl;
int t2 = upper_bound(a, a + 6, 1) - a;//upper_bound返回的是大于x最小的下标
cout << t2 << endl;
cout << find1(1) << endl;// mid分到左边 寻找等于x的最小的下标 等同于lower_bound
cout << find2(1) << endl;// mid分到右边 寻找小于x最大的下标
return 0;
}
//程序运行结果
/*
0
5
0
0
*/