"""
        1. mid point is pivot point 
        2. mid ptr is between ascending sorted arr ==> how to find lo/hi?? => compare mid ptr with most left and most right [l, mid) and (mid,r]; That says, mid ptr is switching roles as left ptr and right ptr between corresponding sorted sub arrays
        3. within sorted subarray, compare target value with (arr[mid] and arr[l]/arr[r]) 
        
        step1, if arr[mid] == target
        step2, if left is sorted[l, mid) => arr[mid] >= arr[l]
            step2.1 if target within range  [l, mid), r = mid -1 
            step2.2 if not, l = mid 
        step3, if right is sorted[mid,r] => arr[mid]  <= arr[r]
            same above
        """
class Solution:
    def search(self, A: List[int], target: int) -> int:
        #Time O(lgN) space O(1)
        n = len(A)
        l,r = 0,n-1
        while l <= r:
            mid = l + (r-l)//2
            if A[mid] == target:
                return mid
            if A[mid] >= A[l]: # left side is sorted, here = is used because there are cases mid is at position of l; 
                if A[l]<=target<A[mid]:
                    r = mid -1
                else:
                    l = mid+1
            
            elif A[mid] <= A[r]:  # right side is sorted 
                if A[mid]<target<=A[r]:
                    l = mid + 1
                else:
                    r = mid -1
        return -1