void mergeSort(long long int *arr, long long int l, long long int r) { if (l < r) { int m = l+(r-l)/2; //Same as (l+r)/2, but avoids overflow for large l and h mergeSort(arr, l, m); mergeSort(arr, m+1, r); merging(arr, l, m, r); } }
void merge(int *A, int min, int max) { int mid; if (min<max) { mid = (min + max) / 2; merge(A, min, mid); merge(A, mid + 1, max); merging(A, min, mid, max); } }
void sort(int low, int high) { int mid; if(low < high) { mid = (low + high) / 2; sort(low, mid); sort(mid+1, high); merging(low, mid, high); }else { return; } }