#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;
}
        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; }  | 
            
        
                    English