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
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long
#define ld long double
#define ull unsigned long long
void dbg_out() { cout << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cout << ' ' << H; dbg_out(T...); }
#define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)

void solve()
{
  ll n;
  cin >> n;
  vector<ll> list(n, 0), krotnosc;
  for(auto &el : list) cin >> el;
  map<ll, ll> mp;
  for(auto el : list) mp[el]++;
  for(auto el : mp){
    krotnosc.push_back(el.second);
  }
  sort(krotnosc.begin(), krotnosc.end(), greater());
  // for(auto el : krotnosc) cout << el << " ";
  // cout << endl;

  ll r = krotnosc.size()-1, res=0;
  for(ll l = 0; l <= r; l++){
    ll suma = 0;
    while(l < r && suma+krotnosc[r] < krotnosc[l]){
      suma += krotnosc[r];
      r--;
    }
    // cout << "jeden: ";
    // dbg(suma);
    if(l < r && suma < krotnosc[l]-1){
      // cout << "wykonane\n";
      // dbg((krotnosc[l]-1) - suma);
      krotnosc[r] -= (krotnosc[l]-1) - suma;
      suma += (krotnosc[l]-1) - suma;
    }
    // cout << "dwa: ";
    // dbg(suma);
    res++;
    // for(auto el : krotnosc) cout << el << " ";
    // cout << endl;
    // dbg(l, r);
  }
  cout << res << endl;
}
 
int main()
{

  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);

// #ifndef ONLINE_JUDGE
//   freopen("../../in.in", "r", stdin);
//   freopen("../../out.out", "w", stdout);
// #endif
  
  solve();
  
}