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
#include <ios>
#include <functional>
#include <cassert>
#include <vector>
#define REP(i, n) for(int i=0; i<(n); ++i)
#define SREP(n) REP(_ ## n, n)
#define FOR(i, p, n) for(int i=(p); i<=(n); ++i)
#define RFOR(i, p, n) for(int i=(p); i>=(n); --i)
#define pb push_back
#define eb emplace_back
#define C const
#define V std::vector
#define F std::function
#define R std::ranges
#define RV std::ranges::views
#define sz(A) int(A.size())
#define all(A) A.begin(), A.end()
#define rall(A) A.rbegin(), A.rend()
typedef long long ll;
typedef long double ld;
typedef V <int> vi;
typedef V <vi> vvi;
typedef V <bool> vb;
typedef V <char> vc;
typedef V <ll> vll;
typedef const int ci;
typedef const ll cll;
int I(){
    int z;
    scanf("%d", &z);
    return z;
}
int main(){
    ci n=I();
    vi kub(n);
    SREP(n)
        ++kub[I()-1];
    std::sort(rall(kub));
    while (!kub.back())
        kub.pop_back();
    int w=0;
    REP(p, sz(kub)){
        ++w;
        for (--kub[p]; p+1<sz(kub)&&kub[p]; --kub[p])
            if (!--kub.back())
                kub.pop_back();
    }
    printf("%d\n", w);
}