#include <bits/stdc++.h> using namespace std; int n; int a[300100]; int tab[300100]; int res[300100]; int main(){ cin>>n; for(int i=0;i<n;i++)cin>>a[i]; sort(a,a+n); int i=0; while(i<n){ int val = a[i]; int res = 1; while(i<n-1 && a[i+1] == val){ i++; res++; } tab[res]++; i++; } for(int i=1;i<=n;i++)tab[i] += tab[i-1]; for(int i=1;i<=n;i++){ int wynik = 0; for(int j=i;j<=n;j+=i){ int top = min(j+i-1, n); wynik += (tab[top] - tab[j-1]) * j; //cout<<tab[j+i-1] - tab[j-1]<<" "<<j<<endl; } cout<<wynik<<" "; } }
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 | #include <bits/stdc++.h> using namespace std; int n; int a[300100]; int tab[300100]; int res[300100]; int main(){ cin>>n; for(int i=0;i<n;i++)cin>>a[i]; sort(a,a+n); int i=0; while(i<n){ int val = a[i]; int res = 1; while(i<n-1 && a[i+1] == val){ i++; res++; } tab[res]++; i++; } for(int i=1;i<=n;i++)tab[i] += tab[i-1]; for(int i=1;i<=n;i++){ int wynik = 0; for(int j=i;j<=n;j+=i){ int top = min(j+i-1, n); wynik += (tab[top] - tab[j-1]) * j; //cout<<tab[j+i-1] - tab[j-1]<<" "<<j<<endl; } cout<<wynik<<" "; } } |