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
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int totals[300001];
vector<int> znaczkis;
vector<int> znaczkis_compressed;

int main() {
    int n, x;
    scanf("%d", &n);
    for (int i = 0; i < n; ++i) {
        scanf("%d", &x);
        znaczkis.push_back(x);
    }
    sort(znaczkis.begin(), znaczkis.end());
    int lastznak = znaczkis[0];
    int zcount = 1;
    for (int i = 1; i < n; ++i) {
            if (znaczkis[i] != lastznak) {
                znaczkis_compressed.push_back(zcount);
                lastznak = znaczkis[i];
                zcount = 0;
            }
            zcount++;
    }
    znaczkis_compressed.push_back(zcount);

    for (int i = 0; i < znaczkis_compressed.size(); ++i) {
        for (int j = 1; j <= znaczkis_compressed[i]; ++j) {
            // printf("%d / %d = %d\n", znaczkis_compressed[i], j, znaczkis_compressed[i] / j);
            totals[j] += znaczkis_compressed[i] / j;
        }
        // printf("--------\n");
    }

    for (int i = 1; i <= n; ++i) {
        printf("%d ", totals[i] * i);
    }
    printf("\n");

    return 0;
}