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