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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include<bits/stdc++.h>
 
#define pb push_back
#define pob pop_back
#define eb emplace_back
#define fi first
#define se second
#define turbo ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define mid ((l+r)/2)
#define midLL ((l+r)/2LL)
#define mide ((lo+hi)/2)
#define mideLL ((lo+hi)/2LL)
#define endl '\n'
#define random_shuffle shandom_ruffle
#define lowbit(x) x&(-x)
#define bits(x) __builtin_popcount(x) 
#define mins(se) (*se.begin())
#define maxs(se) (*--se.end())
#define all(x) x.begin(), x.end()
#define log2_floor(i) (i ? __builtin_clzll(1) - __builtin_clzll(i) : -1)
#define siz(cont) ((int)cont.size())
#define each(it, cont) for(auto &it : cont)

using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;
using pli = std::pair<ll, int>;
using pil = std::pair<int, ll>;
using vll = std::vector<pll>;
using vii = std::vector<pii>;
using vi = std::vector<int>;
using vl = std::vector<ll>;
using vvl = std::vector<vl>;
using vvi = std::vector<vi>;
using vvii = std::vector<vii>;
using vli = std::vector<pli>;
using vvli = std::vector<vli>;
using vil = std::vector<pil>;
using vvil = std::vector<vil>;
using vc = std::vector<char>;
using vvc = std::vector<std::vector<char>>;
using vb = std::vector<bool>;
using vvb = std::vector<vb>;

void err() { std::cout << "\n"; fflush(stdout); }
template<class T, class... Ts>
void err(T arg, Ts &... args) {
    std::cout << arg << ' ';
    err(args...);
}

using namespace std;

int miel(deque<int> &q) {
    int res = 0;
    while (!q.empty()) {
        int lider = q.back();
        q.pop_back();
        while (!q.empty()) {
            if (q.front() < lider) {
                lider -= q.front();
                q.pop_front();
                continue;
            }
            int pom = q.front();
            q.pop_front();
            pom -= lider-1;
            q.push_front(pom);
            break;
        }
        res++;
    }
    return res;
}

signed main() {
    turbo
    int n; cin >> n;
    vi v(n+10);
    for (int i = 0; i < n; i++) {
        int x; cin >> x;
        v[x]++;
    }
    sort(all(v));
    deque<int> q;
    for (auto it : v)
        if (it)
            q.push_back(it);

    cout << miel(q) << endl;
}