题目链接:点击打开链接
思路:水题,顺序处理更新即可。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
using namespace std;
struct node{
int item;
int times;
node(int a,int b):item(a),times(b){}
bool operator<(const node &b)const{
if(times != b.times){
return times > b.times;
}
else{
return item < b.item;
}
}
};
int main(){
int n,k,items;
set<node> s;
map<int,int> m;
scanf("%d%d",&n,&k);
scanf("%d",&items);
m[items] = 1;
s.insert(node(items,1));
for(int i = 1;i < n;i++){
scanf("%d",&items);
printf("%d:",items);
set<node>::iterator it;
int j;
for(j = 0,it = s.begin();j < k && it != s.end();j++,it++){
printf(" %d",it->item);
}
putchar('\n');
s.erase(node(items,m[items]));
m[items]++;
s.insert(node(items,m[items]));
}
return 0;
}