private int count(T[] a, T[] aux,int lo, int hi)
	{ // Sort a[lo..hi].
		if (hi <= lo)
			return 0;
		int mid = lo + (hi - lo) / 2;

		int inversions = 0;
		inversions += count(a, aux, lo, mid); // Sort left half.
		inversions += count(a, aux, mid + 1, hi); // Sort right half.
		inversions += merge(a, aux, lo, mid, hi); // Merge results (code on page
												// 271).

		return inversions;
	}