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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void printVector(const vector <int> &V) {
    int n= V.size();
    for (int i=0; i<n; i++)
        cout << V[i] << ' ';
    cout << endl;
}

int main () {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector <int> input(n);

    for (int i=0; i<n; i++)
        cin >> input[i];
    sort(input.begin(), input.end());

    vector <int> V;
    int counter= 1;
    for (int i=1; i<n; i++) {
        if (input[i-1] == input[i])
            counter++;
        else {
            V.push_back(counter);
            counter= 1;
        }
    }
    V.push_back(counter);
    sort(V.begin(), V.end());
    // printVector(V);

    for (int k=1; k<=n; k++) {
        int sum= 0;
        int beg_it= (lower_bound(V.begin(), V.end(), k) - V.begin());
        // cout << beg_it << endl;
        // continue;

        if (beg_it == (int)V.size()) {
            // cout << "max = " << k-1 << endl;
            for (int j=k; j<=n; j++)
                cout << "0 ";
            cout << endl;
            return 0;
        }

        for (int i=beg_it; i<(int)V.size(); i++)
            sum+= (V[i] / k) * k;

        cout << sum << ' ';
    }

    cout << endl;
    return 0;
}