#include<iostream> #include<map> #include<vector> #include<algorithm> #define pb push_back using namespace std; vector<int>v; int bin(int j,int r) { int i = 0; while (i < j) { int s = (i + j) / 2; if (r > v[s])i = s + 1; else j = s; } return i; } int main() { cin.tie(0); ios_base::sync_with_stdio(0); int n; cin >> n; map<int, int> m; for (int i = 0; i < n; i++) { int a; cin >> a; m[a]++; } for (auto element : m) { v.pb(element.second); } sort(v.begin(), v.end()); int j = v.size() - 1; for (int i = 1; i <= n; i++) { int sum = 0; int x = bin(j, i); if (v[x] < i) { cout << 0 << " "; continue; } for (int t = x; t < v.size(); t++) { sum += (v[t] - (v[t] % i)); } cout << sum << " "; } }
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 | #include<iostream> #include<map> #include<vector> #include<algorithm> #define pb push_back using namespace std; vector<int>v; int bin(int j,int r) { int i = 0; while (i < j) { int s = (i + j) / 2; if (r > v[s])i = s + 1; else j = s; } return i; } int main() { cin.tie(0); ios_base::sync_with_stdio(0); int n; cin >> n; map<int, int> m; for (int i = 0; i < n; i++) { int a; cin >> a; m[a]++; } for (auto element : m) { v.pb(element.second); } sort(v.begin(), v.end()); int j = v.size() - 1; for (int i = 1; i <= n; i++) { int sum = 0; int x = bin(j, i); if (v[x] < i) { cout << 0 << " "; continue; } for (int t = x; t < v.size(); t++) { sum += (v[t] - (v[t] % i)); } cout << sum << " "; } } |