//core code
int a[10] = { 1,3,5,9,13,16,22,45,48,49 };
//寻找>=x的第一个位置 Find the first position >= x ,from left to right;
int pos(int x,int l,int r)
{
int mid;
while (l < r)
{
int mid = (r + l) >> 1;
//为了避免死循环,也可以加1以后在除以2
//In order to avoid an infinite loop,
//you can also add 1 and then divide by 2
if (a[mid] >= x) r = mid - 1;
//死循环:就是r依然等于r l依然等于l
else l = mid + 1;
}
//循环结束- l r停在了结果的前一个位置。
//End of loop - l r stopped at the previous position of the result.
cout << r + 1;
return 1;
}
//从左到右,寻找<=x的第一个位置
//From left to right, find the first position where <= x
int pos1(int x, int l, int r)
{
int mid;
while (l < r)
{
int mid = (l + r) >> 1;
if (a[mid] <= x) l = mid + 1;
else r = mid - 1;
}
cout << l - 1;
return 1;
}