解题思路:主要是及时更新商品频率最高的次数,然后输出推荐的k件商品。
注意格式!

#include<cstdio>
#include<set>
#define N 50005
using namespace std;
int cnt[N];
struct item{
    int id,count; 
    item(int a,int b):id(a),count(b){}
    bool operator < (const item &a)const{
        if(count != a.count)
            return count > a.count;
        else return id < a.id;  
    } 
};
int main(){
    int n,k,num;
    set<item> s;
    scanf("%d%d",&n,&k);
    for(int i =0; i<n; i++){
        scanf("%d",&num);
        if(i!=0){
            printf("%d:",num);
            int tmpk = 0; 
            set<item>::iterator it;
            for(it=s.begin();it != s.end()&&tmpk < k;it++){
                printf(" %d",it->id);
                tmpk++;
            }   
            printf("\n");
        }
        if(s.find(item(num,cnt[num])) != s.end()){
            s.erase(item(num,cnt[num]));
        }
        cnt[num]++;
        s.insert(item(num,cnt[num]));
    }
    return 0;
}