#include<bits/stdc++.h>
using namespace std;
int wyniki[300007];
map<int, int> m;
vector<int> v;
int main() {
cin.tie(0)->sync_with_stdio(0);
int n;
cin>>n;
for(int i = 0; i < n; i++){
int a;
cin>>a;
m[a]++;
}
int maksorlik = 0;
for(auto j:m){
v.push_back(j.second);
maksorlik = max(maksorlik, j.second);
}
sort(v.begin(), v.end(), greater());
wyniki[1]=n;
for(int i = 2; i <=n; i++){
if(i > maksorlik){
break;
}
int suma = 0;
for(int j = 0; j < v.size(); j++){
int dodanie = v[j]/i;
dodanie*=i;
if(dodanie == 0){
break;
}
suma+=dodanie;
}
wyniki[i] = suma;
}
for(int i = 1; i <= n; i++){
cout<<wyniki[i]<<" ";
}
}
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 | #include<bits/stdc++.h> using namespace std; int wyniki[300007]; map<int, int> m; vector<int> v; int main() { cin.tie(0)->sync_with_stdio(0); int n; cin>>n; for(int i = 0; i < n; i++){ int a; cin>>a; m[a]++; } int maksorlik = 0; for(auto j:m){ v.push_back(j.second); maksorlik = max(maksorlik, j.second); } sort(v.begin(), v.end(), greater()); wyniki[1]=n; for(int i = 2; i <=n; i++){ if(i > maksorlik){ break; } int suma = 0; for(int j = 0; j < v.size(); j++){ int dodanie = v[j]/i; dodanie*=i; if(dodanie == 0){ break; } suma+=dodanie; } wyniki[i] = suma; } for(int i = 1; i <= n; i++){ cout<<wyniki[i]<<" "; } } |
English