equal_range:[lower_bound, upper_bound) // first && >= target int lower_bound(vector<int>& nums, int target) { int lo = 0, hi = nums.size() - 1; // lo:lo左侧的值,均<target; // hi:hi右侧的值,均>=target; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (nums[mid] < target) { lo = mid + 1; } else { // nums[mid] >= target hi = mid - 1; // mid - 1 !! } } return lo; } // first && > target int upper_bound(vector<int>& nums, int target) { int lo = 0, hi = nums.size() - 1; // lo:lo左侧的值,均<=target; // hi:hi右侧的值,均>target; while (lo <= hi) { int mid = lo + (hi - lo) / 2; if (nums[mid] <= target) { lo = mid + 1; } else { // nums[mid] > target hi = mid - 1; // mid - 1 !! } } return lo; }