#include <bits/stdc++.h>
using namespace std;
bool compare(pair<int, int> p1, pair<int, int> p2)
{
if (p1.second == p2.second)
return p1.first < p2.first;
return p1.second > p2.second;
}
struct mycmp
{
bool operator()(pair<int,int>p1,pair<int,int>p2)
{
if(p1.second==p2.second)
return p1.first>p2.first;
return p1.second<p2.second;
}
};
void kmostfrequentnumbers(int arr[], int k, int n)
{
unordered_map<int, int> m;
for (int i = 0; i < n; i++)
{
m[arr[i]]++;
}
vector<pair<int, int>> v(m.begin(), m.end());
sort(v.begin(), v.end(), compare);
for (int i = 0; i < k; i++)
{
cout << v[i].first << " ";
}
}
void kmostfruequentnumbersusingpq(int arr[],int k,int n)
{
unordered_map<int,int>m;
for(int i=0;i<n;i++)
m[arr[i]]++;
priority_queue<pair<int,int>,vector<pair<int,int>>,mycmp>
pq(m.begin(),m.end());
for(int i=0;i<k;i++)
{
cout<<pq.top().first;
pq.pop();
}
}
int main()
{
int arr[] = {20, 40, 30, 20, 30, 40, 60, 60}, k = 3;
int n = sizeof(arr[n] / arr[0]);
kmostfrequentnumbers(arr, k, n);
}