Let S S0 S1 Sn 1 be a sequence of n distinct elements on w

Let S = S[0], S[1], ..., S[n 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S are a friendly pair if S[i] S[j] and i

Solution

we have to modify merge procedure such that it finds number of friendly pairs..

first globally declare a variable

int c=0;

void merge(int arr[], int l, int m, int r)

{

    int i, j, k;

    int n1 = m - l + 1;

    int n2 = r - m;

    /* create temp arrays */

    int L[n1], R[n2];

    /* Copy data to temp arrays L[] and R[] */

    for (i = 0; i < n1; i++)

        L[i] = arr[l + i];

    for (j = 0; j < n2; j++)

        R[j] = arr[m + 1+ j];

    /* Merge the temp arrays back into arr[l..r]*/

    i = 0; // Initial index of first subarray

    j = 0; // Initial index of second subarray

    k = l; // Initial index of merged subarray

    while (i < n1 && j < n2)

    {

        if (L[i] <= R[j])

        {

            arr[k] = L[i];

            i++;

          //modified

            c++;

            int l=j+1;

           while(l<n2)

           {

              if (L[i] <= R[l])c++;

              l++;

           }

           //modified

        }

        else

        {

            arr[k] = R[j];

            j++;

        }

        k++;

    }

    /* Copy the remaining elements of L[], if there

       are any */

    while (i < n1)

    {

        arr[k] = L[i];

        i++;

        k++;

    }

    /* Copy the remaining elements of R[], if there

       are any */

    while (j < n2)

    {

        arr[k] = R[j];

        j++;

        k++;

    }

}

/* l is for left index and r is right index of the

   sub-array of arr to be sorted */

void mergeSort(int arr[], int l, int r)

{

    if (l < r)

    {

        // Same as (l+r)/2, but avoids overflow for

        // large l and h

        int m = l+(r-l)/2;

        // Sort first and second halves

        mergeSort(arr, l, m);

        mergeSort(arr, m+1, r);

        merge(arr, l, m, r);

    }

}

//now this... will find .... friendly paris in O(nlog n )time...

 Let S = S[0], S[1], ..., S[n 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S ar
 Let S = S[0], S[1], ..., S[n 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S ar
 Let S = S[0], S[1], ..., S[n 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S ar

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site