You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
939 B
C++
39 lines
939 B
C++
#include <cstdio>
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
#include <algorithm>
|
|
using namespace std;
|
|
typedef pair<int, int> pii;
|
|
int main()
|
|
{
|
|
unordered_map<int, int>M;
|
|
int n, k;
|
|
scanf("%d%d", &n, &k);
|
|
for (int i = 0, x; i < n; i++)
|
|
scanf("%d", &x), M[x]++;
|
|
auto cnt = vector<pii>(M.begin(), M.end());
|
|
sort(cnt.begin(), cnt.end(), [](const pii&lhs, const pii&rhs) {
|
|
return lhs.second > rhs.second;
|
|
});
|
|
int l = 1, r = n, m;
|
|
while (l < r)
|
|
{
|
|
m = (l + r) >> 1;
|
|
int len = 0;
|
|
for (auto ite = cnt.begin(); ite != cnt.end(); ++ite)
|
|
if (ite->second < m) break;
|
|
else len += ite->second / m;
|
|
if (len >= k)
|
|
l = m + 1;
|
|
else
|
|
r = m;
|
|
}
|
|
vector<int>ans;
|
|
for (auto ite = cnt.begin(); ite != cnt.end(); ++ite)
|
|
if (ite->second < r) break;
|
|
else for (int i = ite->second / r; i; i--)
|
|
ans.push_back(ite->first);
|
|
for (int i = 0; i < k; i++)
|
|
printf("%d ", ans[i]);
|
|
return 0;
|
|
} |