package search; /** * @author Nikita Doschennikov (me@fymio.us) */ public class BinarySearch3637 { public static void main(String[] args) { IntList a = new IntList(); int x = Integer.parseInt(args[0]); int n = args.length; for (int i = 1; i < n; i++) { a.put(Integer.parseInt(args[i])); } int start = searchIterativeDecreasing(x, a); int end = searchIterativeIncreasing(x, a.getReversed()); System.out.println(((end - start) == -1) ? 0 : (end - start)); } static int searchIterativeIncreasing(int x, IntList a) { if (a.getLength() == 0) { return 0; } int low = 0, high = a.getLength() - 1; while (low <= high) { int mid = low + (high - low) / 2; if (a.get(mid) <= x) { low = mid + 1; } else { high = mid - 1; } } return low; } static int searchIterativeDecreasing(int x, IntList a) { if (a.getLength() == 0) { return 0; } int low = 0, high = a.getLength() - 1; while (low <= high) { int mid = low + (high - low) / 2; if (a.get(mid) <= x) { high = mid - 1; } else { low = mid + 1; } } return low; } static int searchRecursive(int x, IntList a) { return searchRecursiveHelper(x, a, 0, a.getLength() - 1); } private static int searchRecursiveHelper( int x, IntList a, int low, int high ) { if (low > high) { return low; } int mid = low + (high - low) / 2; if (a.get(mid) <= x) { return searchRecursiveHelper(x, a, low, mid - 1); } else { return searchRecursiveHelper(x, a, mid + 1, high); } } }