test case :

[6,6,12] 2 [7,7,7,7,10,7,7,7] 4 [1,2,1,1,1,1,1,1,1] 1 [46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,57,46,46,46,46] 20

arr = [6,6,12] ^ include m arr = [7,7,7,7, | 10,7,7,7] ^ split into two parts


class Solution:
    def getIndex(self, reader: 'ArrayReader') -> int:
        """ tc O(lgN)  sc O(1) 
        note need to discuss odd and even cases seperatedly 
        """
        l,r = 0, reader.length()-1
        #mid =  l + (r - l)//2
        while l < r:
            mid = (l + r)//2
            if (r-l+1)%2 ==1 :  #arr is odd 
                val = reader.compareSub(l,mid,mid,r)
            else:
                val = reader.compareSub(l,mid,mid+1,r)
            # right side is bigger
            if val == -1:
                l = mid+1
            elif val == 1:
                r = mid
            elif val == 0:
                return mid
        return l