package sort;
public class Test53 {
public static void main(String[] args) {
int[] s = { 1, 2, 3, 3, 3, 3, 3, 4, 5, 6 };
System.out.println(getLast(s, 3, 0, s.length - 1)
- getFirst(s, 3, 0, s.length - 1) + 1);
}
public static int getFirst(int[] a, int key, int from, int to) {
int mid = (from + to) >>> 1;
if (a[mid] == key) {
if (mid == 0 || a[mid - 1] != key)
return mid;
else {
to = mid - 1;
}
}
if (a[mid] < key) {
from = mid + 1;
}
if (a[mid] > key) {
to = mid - 1;
}
return getFirst(a, key, from, to);
}
public static int getLast(int[] a, int key, int from, int to) {
int mid = (from + to) >>> 1;
if (a[mid] == key) {
if (mid == a.length - 1 || a[mid + 1] != key) {
return mid;
} else {
from = mid + 1;
}
}
if (a[mid] > key) {
to = mid - 1;
}
if (a[mid] < key) {
from = mid + 1;
}
return getLast(a, key, from, to);
}
}