class Solution {
public:
int getMinRange(int A[],int n,int target){
int low=0,hi=n-1,mid;
while(low<=hi){
mid = low+(hi-low)/2;
if(A[mid]<target)
low = mid+1;
else if(A[mid]==target){
if(mid==0||A[mid-1]!=target)
return mid;
else
hi = mid-1;
}
else
hi = mid-1;
}
return -1;
}
int getMaxRange(int A[],int n,int target){
int low=0,hi=n-1,mid;
while(low<=hi){
mid = low+(hi-low)/2;
if(A[mid]<target)
low = mid+1;
else if(A[mid]==target){
if(mid==n-1||A[mid+1]!=target)
return mid;
else
low = mid+1;
}
else
hi = mid-1;
}
return -1;
}
vector<int> searchRange(int A[], int n, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<int> ans;
ans.push_back(getMinRange(A,n,target));
ans.push_back(getMaxRange(A,n,target));
return ans;
}
};
public:
int getMinRange(int A[],int n,int target){
int low=0,hi=n-1,mid;
while(low<=hi){
mid = low+(hi-low)/2;
if(A[mid]<target)
low = mid+1;
else if(A[mid]==target){
if(mid==0||A[mid-1]!=target)
return mid;
else
hi = mid-1;
}
else
hi = mid-1;
}
return -1;
}
int getMaxRange(int A[],int n,int target){
int low=0,hi=n-1,mid;
while(low<=hi){
mid = low+(hi-low)/2;
if(A[mid]<target)
low = mid+1;
else if(A[mid]==target){
if(mid==n-1||A[mid+1]!=target)
return mid;
else
low = mid+1;
}
else
hi = mid-1;
}
return -1;
}
vector<int> searchRange(int A[], int n, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
vector<int> ans;
ans.push_back(getMinRange(A,n,target));
ans.push_back(getMaxRange(A,n,target));
return ans;
}
};