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
#include<bits/stdc++.h>
using namespace std;
const int MAXX=1e5*5+5;
int tab[MAXX]; 
int cmp(int a, int b){
    return tab[a]>tab[b];
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n; 
    cin>>n;
    for(int i=0;i<n;i++){
        int a; 
        cin>>a; 
        tab[a]++;
    }
    vector<int>liczby;
    for(int i=0;i<=n+2;i++){
        liczby.push_back(i);
    }
    sort(liczby.begin(), liczby.end(), cmp);
    //for(auto x : liczby){
    //    cout<<x<<" ";
    //}
    int p=0;
    int k=n;
    int wynik=1;
    int suma=0;
    while(p<k){
        //cout<<liczby[p]<<" "<<liczby[k]<<" ";
        //cout<<tab[liczby[p]]<<" "<<tab[liczby[k]]<<"\n";
        suma+=tab[liczby[k]];
        if(tab[liczby[p]]>suma){
            k--;
        }
        if(tab[liczby[p]]<=suma){
            wynik++;
            tab[liczby[k]]=suma-tab[liczby[p]]+1;
            suma=0;
            //cout<<tab[liczby[k]]<<" ";
            p++;
        }
    }
    cout<<wynik<<"\n";
    return 0;
}