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
#include <bits/stdc++.h>
using namespace std;

const int MAX = 5e5+1;
int zlicz[MAX];
multiset<int> a;

int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin >> n;

    int x;
    for(int i = 0; i < n; i++){
        cin >> x;
        zlicz[x]++;
    }

    for(int i = 1; i < MAX; i++){
        if(zlicz[i] > 0){
            a.insert(zlicz[i]);
        }
    }

    int wynik = 0, ile, reszta;
    while(!a.empty()){
        wynik++;
        ile = *a.rbegin();
        a.erase(--a.end());
        ile--;
        while(ile > 0 && !a.empty())
        {
            if(*a.begin() <= ile){
                ile -= *a.begin();
                a.erase(a.begin());
            }
            else{
                ile = 0;
                reszta = *a.begin() - ile; 
                a.erase(a.begin());
                a.insert(reszta);
            }
        }
    }

    cout << wynik;

    return 0;
}