Untitled
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...