1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <algorithm>
#include <cstdio>
#include <unordered_map>
#include <vector>

using namespace std;

unordered_map<int, int> counter;
vector<int> groups;

int main () {
    int n, a;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a);
        counter[a]++;
    }
    for (const auto& pair: counter) {
        groups.push_back(pair.second);
    }
    sort(groups.begin(), groups.end());
    for (int i = 1, j = 0; i <= n; i++) {
        while ((j < groups.size()) && (groups[j] < i)) j++;
        if (j < groups.size()) {
            int sum = 0;
            for (int k = j; k < groups.size(); k++) {
                sum += (groups[k] / i) * i;
            }
            printf("%d ", sum);
            continue;
        }
        printf("0 ");
    }
    return 0;
}