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
#include<bits/stdc++.h>
using namespace std;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin >> n;
    int znaczki[n];
    for(int i = 0; i < n; i++){
        cin >> znaczki[i];
    }
    sort(znaczki, znaczki + n);
    int poprzednia_wartosc;

    poprzednia_wartosc = 0;
    vector <long long> ilosci;
    int x = -1;
    for(int i = 0; i < n; i++){
        if(znaczki[i] == poprzednia_wartosc){
            ilosci[x] += 1;
        }
        else{
            x += 1;
            ilosci.push_back(1);
            poprzednia_wartosc = znaczki[i];
        }
    }
    ilosci.push_back(2000000000);
    int wynik = 0;
    int w;
    vector <long long> wziete;
        for(int d = 0; d <= x; d++){
            wziete.push_back(0);
    }
    int wyniki[n];
    for(int i = n; i > 0; i--){
        for(int d = 0; d < x + 1; d++){
        if(wziete[d]){
            ilosci[d] += wziete[d];
            wynik -= wziete[d];
            wziete[d] += ilosci[d] / i;
            wynik += ilosci[d] / i * i;
            ilosci[d]  -= ilosci[d] / i * i;


        }
        else{
            if(ilosci[d] == i){
                wziete[d] = 1;
                wynik += i;
                ilosci[d] -= i;
            }
        }}
        wyniki[i - 1] = wynik;
    }
    for(int i = 0; i < n; i++){
        cout << wyniki[i] << ' ';
    }
}