lower_bound函数:返回第一个等于x的位置,若没有,返回-1。
upper_bound函数:返回第一个大于x的位置,若没有,返回N。
int Lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置
{
int mid, ans = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (A[mid] >= x)
right = (ans = mid) - 1;
else
left = mid + 1;
}
if (A[ans] == x)
return ans;
else
return -1;
}
int Upper_bound(int A[], int left, int right, int x)//返回第一个大于x的位置
{
int mid, ans = 0;
int Asize = right;
while (left < right)
{
mid = left + (right - left) / 2;
if (A[mid] > x)
right = (ans = mid);
else
left = mid + 1;
}
if (A[ans] > x)
return ans;
else
return Asize;
}
算法笔记写法
lower_bound函数:返回第一个等于x的位置,若没有,返回N。
upper_bound函数:返回第一个大于x的位置,若没有,返回N。
int Lower_bound(int A[], int left, int right, int x)//返回第一个等于x的位置
{
int mid;
while (left < right)
{
mid = (left + right) / 2;
if (A[mid] >= x)
right = mid;
else
left = mid + 1;
}
return left;
}
int Upper_bound(int A[], int left, int right, int x)//返回第一个大于x的位置
{
int mid;
while (left < right)
{
mid = (left + right) / 2;
if (A[mid] > x)
right = mid;
else
left = mid + 1;
}
return left;
}