二分查找模板(包括4种情况)
1、数组中 大于等于 x的 第一个位置
int BF (int x) { int l = 0, r = n - 1; while (l < r) { int mid = l + r >> 1; if (a[mid] >= x) r = mid; else l = mid + 1; } return r; }
2、数组中 大于等于 x的 最后一个位置
int BF (int x) { int l = 0, r = n - 1; while (l < r) { int mid = l + r + 1 >> 1; if (a[mid] >= x) l = mid; else r = mid - 1; } return r; }
3、数组中 小于等于 x的 最后一个位置
int BF (int x) { int l = 0, r = n - 1; while (l < r) { int mid = l + r + 1 >> 1; if (a[mid] <= x) l = mid; else r = mid - 1; } return l; }
4、数组中 小于等于 x的 第一个位置
int BF (int x) { int l = 0, r = n - 1; while (l < r) { int mid = l + r >> 1; if (a[mid] <= x) r = mid; else l = mid + 1; } return l; }