#include <bits/stdc++.h> using namespace std; struct ab{ int a=0,b=-1; }; bool comp(ab a,ab b){ return a.a<b.a; } ab tab[300001];//ile takich samych wystąpien takich samych wystapien //int ile[300001]; map<int,int>mapa; int main() { ios_base::sync_with_stdio(false); int n,a; cin>>n; for(int i=0;i<n;++i){ cin>>a; mapa[a]++; } int k=0,mx=0; for(auto i:mapa){ //tab[k]=i.second; tab[i.second].a++; if(tab[i.second].b==-1){ tab[i.second].b=i.second; mx=max(mx,i.second); k++; } } sort(tab,tab+mx,comp); /* for(int i=0;i<k+10;++i){ cout<<tab[i].a<<' '<<tab[i].b<<"\n"; } */ int j=0,l=0; while(tab[l].a==0)l++; cout<<n<<' '; int s; j=l; for(int i=2;i<=n;++i){ s=0; while(tab[j].b/i==0)j++; for(int y=j;y<k+l;++y){ s+=i*(tab[y].b/i)*tab[y].a; } cout<<s<<' '; } 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 43 44 45 46 47 48 49 50 51 52 | #include <bits/stdc++.h> using namespace std; struct ab{ int a=0,b=-1; }; bool comp(ab a,ab b){ return a.a<b.a; } ab tab[300001];//ile takich samych wystąpien takich samych wystapien //int ile[300001]; map<int,int>mapa; int main() { ios_base::sync_with_stdio(false); int n,a; cin>>n; for(int i=0;i<n;++i){ cin>>a; mapa[a]++; } int k=0,mx=0; for(auto i:mapa){ //tab[k]=i.second; tab[i.second].a++; if(tab[i.second].b==-1){ tab[i.second].b=i.second; mx=max(mx,i.second); k++; } } sort(tab,tab+mx,comp); /* for(int i=0;i<k+10;++i){ cout<<tab[i].a<<' '<<tab[i].b<<"\n"; } */ int j=0,l=0; while(tab[l].a==0)l++; cout<<n<<' '; int s; j=l; for(int i=2;i<=n;++i){ s=0; while(tab[j].b/i==0)j++; for(int y=j;y<k+l;++y){ s+=i*(tab[y].b/i)*tab[y].a; } cout<<s<<' '; } return 0; } |