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