Untitled

 avatar
unknown
plain_text
2 years ago
2.0 kB
3
Indexable
//{ Driver Code Starts

#include <bits/stdc++.h>
using namespace std;

// } Driver Code Ends

class Solution{
	
	struct info {
	    int value;
	    int index;
	};
	
	void merge(info arr[], int l, int m, int r)
    {
      // Your code here
         int n1 = m - l + 1, n2 = r - m;
         info *arr1 = new info[n1];
         info *arr2 = new info[n2];
         
         // mảng phụ
         for(int i = 0; i < n1; i++) arr1[i] = arr[l + i];
         for(int i = 0; i < n2; i++) arr2[i] = arr[m + i + 1];
         
         // trộn 2 dãy tăng dần
         int k = l, i = 0, j = 0;
         while(i < n1 && j < n2)
         {
             if(arr1[i].value <= arr2[j].value)
                 arr[k++] = arr1[i++];
             else
                 arr[k++] = arr2[j++];
         }
         
         // sao chép phần còn lại
         while(i < n1) arr[k++] = arr1[i++];
         while(j < n2) arr[k++] = arr2[j++];
         
         delete []arr1;
         delete []arr2;    
    }
 
    void mergeSort(info arr[], int l, int r)
    {
        //code here
        if(l < r)
        {
            int m = l + ((r - l)/2);
            mergeSort(arr, l, m);
            mergeSort(arr, m + 1 , r);
            merge(arr, l, m, r);
        }
    }
    
	public:
	int getIndexInSortedArray(int arr[], int n, int idx)
	{
	    // Your code goes here
	    info *a = new info[n];
	    for(int i=0;i<n;i++) a[i].value = arr[i], a[i].index = i;
	    mergeSort(a,0,n-1);
	    for(int i = 0; i < n; i++)
	        if (a[i].index == idx)
	            return i;
	}
 
    
 
// } Driver Code Ends	 

};
	

//{ Driver Code Starts.

int main() 
{
   	
   
   	int t;
    cin >> t;
    while (t--)
    {
    	int n,k;
        cin>>n>>k;
        int a[n];
        for(int i=0;i<n;++i)
        	cin>>a[i];


        
        Solution ob;
        cout << ob.getIndexInSortedArray(a,n,k);
        
	    cout << "\n";
	     
    }
    return 0;
}




// } Driver Code Ends
Editor is loading...