classSolution{public:
vector<int>searchRange(vector<int>& nums,int target){if(nums.empty())return vector<int>{-1,-1};int left =left_bound(nums, target);if(left ==-1)return{-1,-1};int right =right_bound(nums, target);return vector<int>{left, right};}intleft_bound(vector<int>& nums,int target){int left =0, right = nums.size()-1;int mid;while(left <= right){
mid = left +(right - left)/2;if(nums[mid]== target){
right = mid -1;}elseif(nums[mid]< target){
left = mid +1;}elseif(nums[mid]> target){
right = mid -1;}}if(left >= nums.size()|| nums[left]!= target){return-1;}return left;}intright_bound(vector<int>& nums,int target){int left =0, right = nums.size()-1;int mid;while(left <= right){
mid = left +(right - left)/2;if(nums[mid]== target){
left = mid +1;}elseif(nums[mid]< target){
left = mid +1;}elseif(nums[mid]> target){
right = mid -1;}}if(right <0|| nums[right]!= target){return-1;}return right;}};
classSolution:defsearchRange(self, nums: List[int], target:int)-> List[int]:
n =len(nums)if n ==0:return[-1,-1]deffind_left(target):
l,r =0,n-1while l <= r:
mid =(r-l)//2+ l
if nums[mid]< target:
l = mid +1else:
r = mid-1if l > n-1or nums[l]!= target:return-1return l
deffind_right(target):
l,r =0,n-1while l <= r:
mid =(r-l)//2+ l
if nums[mid]<= target:
l = mid +1else:
r = mid -1if r <0or nums[r]!= target:return-1return r
return[find_left(target), find_right(target)]