#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll n_max = 500005;
vector<ll> arr(n_max,-1);
vector<ll>occur;
vector<ll>ans;
void solve(ll n){
//ans[0] = n;
for(auto x : occur){
ll j = 1;
while(j<=x){
ans[j-1] = ans[j-1] + x / j * j;
j++;
}
}
for(auto x : ans) cout << x << " ";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
ll n;
cin >> n;
arr.resize(n,-1);
ans.resize(n);
for(int i = 0;i < n;i++){
cin >> arr[i];
}
sort(arr.begin(),arr.end()); // 1 1 1 2 2 3 3 4 4 4 itd. można łatwo zliczać
for(int i = 0;i < n;i++){
if(i != 0 && arr[i] == arr[i-1]) occur[occur.size()-1]++;
else occur.push_back(1);
}
sort(occur.rbegin(),occur.rend());
solve(n);
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 | #include <bits/stdc++.h> using namespace std; using ll = long long; const ll n_max = 500005; vector<ll> arr(n_max,-1); vector<ll>occur; vector<ll>ans; void solve(ll n){ //ans[0] = n; for(auto x : occur){ ll j = 1; while(j<=x){ ans[j-1] = ans[j-1] + x / j * j; j++; } } for(auto x : ans) cout << x << " "; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n; cin >> n; arr.resize(n,-1); ans.resize(n); for(int i = 0;i < n;i++){ cin >> arr[i]; } sort(arr.begin(),arr.end()); // 1 1 1 2 2 3 3 4 4 4 itd. można łatwo zliczać for(int i = 0;i < n;i++){ if(i != 0 && arr[i] == arr[i-1]) occur[occur.size()-1]++; else occur.push_back(1); } sort(occur.rbegin(),occur.rend()); solve(n); return 0; } |
English