题目链接
思路
按次数和索引来排序
次数是第一标尺
索引是第二标尺
通过sort(begin,end,cmp)的第三个参数
来说明如何排序
代码
using namespace std;
#include <iostream>
#include<vector>
#include<algorithm>
vector<int>ranks;
int cnt[50010];
bool visited[50010];
int n, k,temp;
bool cmp(int a, int b) {
if (cnt[a] == cnt[b])return a < b;
else return cnt[a] > cnt[b];
}
int main() {
cin >> n >> k;
for (int i = 0; i < n; i++) {
cin >> temp;
if (i != 0) {
cout << temp << ":";
for (auto i : ranks)cout << " " << i;
cout << endl;
}
cnt[temp]++;
if (!visited[temp]) {
ranks.push_back(temp);
visited[temp] = true;
}
sort(ranks.begin(), ranks.end(), cmp);
if (ranks.size() > k) {
visited[ranks[ranks.size() - 1]] = false;
ranks.pop_back();
}
}
return 0;
}