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