传送门:http://codeforces.com/contest/1077/problem/D
幸好这题没被hack QAQ
代码:
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;
const int maxv=2e5+5;
struct node
{
int val,num;
int ci;
bool operator < (const node bx)const
{
return num/ci<bx.num/bx.ci;
}
}x[maxv];
vector<int>ans;
int ha[maxv],n,k;
priority_queue<node>q;
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
int tmp;
scanf("%d",&tmp);
ha[tmp]++;
}
int cnt=0;
for(int i=1;i<=200000;i++)
{
if(ha[i]!=0)
{
x[++cnt].num=ha[i];
x[cnt].val=i;
x[cnt].ci=1;
q.push(x[cnt]);
}
}
while(ans.size()<k)
{
node t=q.top();
q.pop();
t.ci++;
ans.push_back(t.val);
q.push(t);
}
for(int i=0;i<ans.size();i++)
{
printf("%d ",ans[i]);
}
return 0;
}