class Solution {
public:
    int findFirst(vector<int > &nums , int k , int low , int high ){
        int first =-1;
        while (low <= high){
            int mid = low + (high-low)/2;
            if(nums[mid] == k){
                first= mid;
                high = mid - 1;
            }else if(nums[mid] < k){
                low = mid +1;
            }else{
                high = mid-1;
            }   
        }

        return first;
    }
    int findLast(vector<int > &nums , int k , int low , int high ){
        int last =-1;
        while (low <= high){
            int mid = low + (high-low)/2;
            if(nums[mid] == k){
                last= mid;
                low = mid + 1;
            }else if(nums[mid] < k){
                low = mid +1;
            }else{
                high = mid-1;
            }   
        }

        return last;
    }

    vector<int> searchRange(vector<int>& nums, int target) {
       int low = 0;
       int high = nums.size() -1;
        
        int first = findFirst(nums , target , low , high);
        int sec = findLast(nums , target , low , high);

       return {first ,sec};
    }
};

https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/

https://takeuforward.org/data-structure/last-occurrence-in-a-sorted-array/