注意计算复杂度。
#include<cstdio>
#include<set>
using namespace std;
struct node {
int data;
int times;
node(int _data, int _times) : data(_data), times(_times) {}
bool operator < (const node &a) const {
if (a.times != times) return times > a.times;
return data < a.data;
}
};
int r[50005], t[50005] = {0};
int main() {
int n, k;
set<node> s;
scanf("%d %d", &n, &k);
for (int i = 0; i < n; i++) {
scanf("%d", &r[i]);
}
t[r[0]] = 1;
s.insert(node(r[0], 1));
set<node>::iterator it;
for (int i = 1; i < n; i++) {
printf("%d:", r[i]);
int j = 0;
for(it = s.begin(); it != s.end() && j < k; it++) {
printf(" %d", it->data);
j++;
}
printf("\n");
it = s.find(node(r[i], t[r[i]]));
if (it != s.end())
s.erase(node(r[i], t[r[i]]));
t[r[i]] ++;
s.insert(node(r[i], t[r[i]]));
}
return 0;
}