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
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

priority_queue<int> q1, q2;

int main() {
        int n, res = 0;
        cin >> n;

        int *tab = new int[n+10]{};
        for(int i=0;i<n;++i) {
               int a;
               cin >> a;
               ++tab[a];
        }

        for(int i=1;i<=n;++i) {
               if(tab[i] > 0)
                q1.push(tab[i]);
        }

        q2.push(q1.top());
        q1.pop();

        while(!q1.empty() && !q2.empty()) {
               while(!q1.empty() && !q2.empty() && q1.top() >= q2.top()) {
                q2.push(q1.top());
                q1.pop();
               }
               if(!q1.empty() && !q2.empty()) {
                ++res;
                q1.pop();
                q2.pop();
               }
        }

        cout << res + q2.size();

        return 0;
}