Untitled
unknown
plain_text
3 years ago
2.0 kB
6
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 EndsEditor is loading...