array = [0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,9]
def upper(a, val, left, right):
if left == right:
return left
mid = (left + right + 1) // 2
if a[mid] > val:
return upper(a, val, left, mid-1)
else:
return upper(a, val, mid, right)
for i in range(10):
print upper(array, i , 0, len(array)-1)
YXJyYXkgPSBbMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw5XQoKZGVmIHVwcGVyKGEsIHZhbCwgbGVmdCwgcmlnaHQpOgogICAgaWYgbGVmdCA9PSByaWdodDoKICAgICAgICByZXR1cm4gbGVmdAogICAgbWlkID0gKGxlZnQgKyByaWdodCArIDEpIC8vIDIKCiAgICBpZiBhW21pZF0gPiB2YWw6CiAgICAgICAgcmV0dXJuIHVwcGVyKGEsIHZhbCwgbGVmdCwgbWlkLTEpCiAgICBlbHNlOgogICAgICAgIHJldHVybiB1cHBlcihhLCB2YWwsIG1pZCwgcmlnaHQpCgpmb3IgaSBpbiByYW5nZSgxMCk6CiAgICBwcmludCB1cHBlcihhcnJheSwgaSAsIDAsIGxlbihhcnJheSktMSk=