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;}
