Getting wrong ans

#include
using namespace std;

int merge(int arr[], int temp[], int left, int mid,
int right)
{
int i, j, k;
int inv_count = 0;

i = left; /* i is index for left subarray*/
j = mid; /* j is index for right subarray*/
k = left; /* k is index for resultant merged subarray*/
while ((i <= mid - 1) && (j <= right)) {
    if (arr[i] <= arr[j]) {
        temp[k++] = arr[i++];
    }
    else {
        temp[k++] = arr[j++];

        /* this is tricky -- see above
        explanation/diagram for merge()*/
        inv_count = inv_count + (mid - i);
    }
}

/* Copy the remaining elements of left subarray

(if there are any) to temp*/
while (i <= mid - 1)
temp[k++] = arr[i++];

/* Copy the remaining elements of right subarray
   (if there are any) to temp*/
while (j <= right)
    temp[k++] = arr[j++];

/*Copy back the merged elements to original array*/
for (i = left; i <= right; i++)
    arr[i] = temp[i];

return inv_count;

}
int mergeSort(int arr[], int temp[], int left, int right)
{
int mid, inv_count = 0;
if (right > left) {
/* Divide the array into two parts and
call _mergeSortAndCountInv()
for each of the parts */
mid = (right + left) / 2;

    /* Inversion count will be sum of
    inversions in left-part, right-part
    and number of inversions in merging */
    inv_count += mergeSort(arr, temp, left, mid);
    inv_count += mergeSort(arr, temp, mid + 1, right);

    /*Merge the two parts*/
    inv_count += merge(arr, temp, left, mid + 1, right);
}
return inv_count;

}

int main() {
int t,n;
cin>>t;
while(t–){
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
int temp[n];
cout<<mergeSort(a,temp,0,n-1)<<endl;
}
return 0;
}

I am not able to find anything wrong in your code, maybe it’s wrong because of the corner cases. You can see my code for reference.

please solve the doubt

here is your corrected code:


if this solves your doubt please mark it as resolved :slight_smile: