public static int subIndex(int n, int[] docStarts) { int size = docStarts.length;int lo = 0; int hi = size - 1; while (hi >= lo) {int mid = (lo + hi) >>> 1;int midValue = docStarts[mid];if (n < midValue)hi = mid - 1;else if (n > midValue)lo = mid + 1;else { while (mid + 1 < size && docStarts[mid + 1] == midValue) {mid++; }return mid;}}return hi;}

public static int subIndex ( int n , int [ ] docStarts ) { int size = docStarts . length ; int lo = 0 ; int hi = size - 1 ; while ( hi >= lo ) { int mid = ( lo + hi ) > > > 1 ; int midValue = docStarts [ mid ] ; if ( n < midValue ) hi = mid - 1 ; else if ( n > midValue ) lo = mid + 1 ; else { while ( mid + 1 < size && docStarts [ mid + 1 ] == midValue ) { mid ++ ; } return mid ; } } return hi ; }
public static int SubIndex(int n, int[] docStarts) {int size = docStarts.Length;int lo = 0; int hi = size - 1; while (hi >= lo){int mid = (int)((uint)(lo + hi) >> 1);int midValue = docStarts[mid];if (n < midValue){hi = mid - 1;}else if (n > midValue){lo = mid + 1;}else {while (mid + 1 < size && docStarts[mid + 1] == midValue){mid++; }return mid;}}return hi;}
