class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int n = (int)nums.size();
// lower_bound 的可能实现
auto lowerbound = [&](auto &&less) {
int lo = 0, hi = n;
while (lo < hi) {
int mid = (lo + hi) / 2;
if (less(nums[mid], target)) lo = mid + 1;
else hi = mid;
}
return lo;
};
// std::lower_bound
int left = lowerbound(std::less<>{});
// std::upper_bound
int right = lowerbound(std::less_equal<>{});
return (left < n && nums[left] == target) ?
vector<int>{left, right-1} :
vector<int>{-1, -1};
}
};