int lower_bound(int number, int left, int right) { //寻找比number大的最小的一个数
int l = left, r = right;
while(l < r) {
int mid = (l+r)>>1; //mid能取到l,但取不到r
if (arr[mid] >= number) r = mid;
else l = mid+1;
}
return arr[l];
}
int upper_bound(int number, int left, int right) { //寻找比number小的最大的一个数
int l = left, r = right;
while(l < r) {
int mid = (l+r+1)>>1; //mid能取到r,但不能取到l
if (arr[mid] <= number) l = mid;
else r = mid-1;
}
}
注意:右移操作是向下取整