Java
import java.io.*;
import java.util.*;
public class Main {
    static final int N = 50010;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] firstLine = br.readLine().split(" ");
        int n = Integer.parseInt(firstLine[0]);
        int k = Integer.parseInt(firstLine[1]);
        int[] itemFrequency = new int[N];
        List<Integer> recommendations = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        String[] items = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            int currentItem = Integer.parseInt(items[i]);
            if (i > 0) {
                sb.append(currentItem).append(":");
                for (Integer recommendation : recommendations) {
                    sb.append(" ").append(recommendation);
                }
                sb.append("\n");
            }
            itemFrequency[currentItem]++;
            if (!recommendations.contains(currentItem)) {
                recommendations.add(currentItem);
            }
            recommendations.sort((a, b) -> {
                if (itemFrequency[a] != itemFrequency[b]) {
                    return Integer.compare(itemFrequency[b], itemFrequency[a]);
                } else {
                    return Integer.compare(a, b);
                }
            });
            if (recommendations.size() > k) {
                recommendations.remove(recommendations.size() - 1);
            }
        }
        System.out.print(sb);
        br.close();
    }
}C++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 50010;
int n, m;
int cnt[N];
int top_k[N];
int main() {
    scanf("%d%d", &n, &m);
    int k = 0;
    for (int i = 0; i < n; ++i) {
        int id;
        scanf("%d", &id);
        if (i) {
            printf("%d:", id);
            for (int j = 0; j < k; j++) printf(" %d", top_k[j]);
            printf("\n");
        }
        bool flag = false;
        for (int j = 0; j < k; ++j)
            if (top_k[j] == id) {
                flag = true;
                break;
            }
        if (!flag) top_k[k++] = id;
        cnt[id]++;
        sort(top_k, top_k + k, [](int &a, int &b) {
            if (cnt[a] != cnt[b]) return cnt[a] > cnt[b];
            else return a < b;
        });
        k = min(k, m);
    }
    return 0;
}