Set 求解
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
// 按照频率进行降序排序,相同
// 按照index进行升序排序
const int maxn = 50000 + 10;
int has[maxn];
struct node
{
int value;
int cnt;
// 运算符重载
bool operator<(const node &a) const
{
return (cnt != a.cnt) ? cnt > a.cnt : value < a.value;
}
};
int main(int argc, char const *argv[])
{
int n, k, num;
cin >> n >> k;
set<node> s;
for (int i = 0; i < n; i++)
{
cin >> num;
if (i != 0) // 当不是第一个数字的时候
{
cout << num << ":";
int temp_cnt = 0;
for (auto it = s.begin(); temp_cnt < k && it != s.end(); it++)
{
cout << " " << it->value;
temp_cnt++;
}
cout << endl;
}
auto it = s.find(node{num, has[num]});
if (it != s.end())
s.erase(it);
has[num]++;
s.insert(node{num, has[num]});
}
return 0;
}