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