Why are we doing this?

int mid = lo + (hi - lo) / 2;

why not (start+end)/2 ?

since the constraints are large
adding to big integers will lead to overflow

and in case of lo+ ( hi-lo)/2
are u doing the same thing
just that u first subtract the 2 values then add the 3rd value
hence no overflow occurs