B:
while(lo<hi-1)
{
mi=(lo+hi)>>1;
if(e<A[mi]) hi=mi;
else(A[mi]<=e) lo=mi;
}
return lo;
结束条件:[lo hi) 即区间只有一个元素时
结果:A[lo]<=e<A[hi]
C:
while(lo<hi)
{
mi=(lo+hi)>>1;
if(e<A[mi]) hi=mi;
else(A[mi]<=e) lo=mi+1;
}
return lo--;
结束条件:lo =hi 即区间为空时
结果:A[lo-1]<=e<A[hi/lo]
对比:B/C的结果都可以保证找到不大于e的最后一个元素
1)B结束条件限制了 无法满足对单元素vector使用
2)对于[0,n)的vector,期望的返回秩[-1,n)
B中lo只在vector内变化,无法返回-1,即e<A[0]时lo=0,C中lo--后可以返回-1