#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using vi = vector<int>;
using vl = vector<ll>;
using vb = vector<bool>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using str = string;
#define all(a) a.begin(), a.end()
#define print(a) for (auto elem:a) cout<<elem<<' '; cout<<'\n'
#define segprep(b) resize(1<<((int)ceil(log2(b.size()))+1))
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
scanf("%d", &n);
vi nums(n);
for (auto &i:nums) scanf("%d", &i);
nums.push_back((ll)-1);
sort(all(nums));
vi counts;
counts.reserve(n);
for (int i = 1; i <= n; i++){
if (nums.at(i) != nums.at(i-1)) counts.push_back(1);
else counts.back()++;
}
counts.shrink_to_fit();
sort(all(counts));
int ans;
for (int k = 1; k <= n; k++){
ans = 0;
for (auto i = lower_bound(all(counts), k); i != counts.end(); i++){
ans += (*i/k)*k;
}
printf("%d ", ans);
}
printf("\n");
}
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 | #include<bits/stdc++.h> using namespace std; using ll = long long; using ull = unsigned long long; using vi = vector<int>; using vl = vector<ll>; using vb = vector<bool>; using pii = pair<int, int>; using pll = pair<ll, ll>; using str = string; #define all(a) a.begin(), a.end() #define print(a) for (auto elem:a) cout<<elem<<' '; cout<<'\n' #define segprep(b) resize(1<<((int)ceil(log2(b.size()))+1)) int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; scanf("%d", &n); vi nums(n); for (auto &i:nums) scanf("%d", &i); nums.push_back((ll)-1); sort(all(nums)); vi counts; counts.reserve(n); for (int i = 1; i <= n; i++){ if (nums.at(i) != nums.at(i-1)) counts.push_back(1); else counts.back()++; } counts.shrink_to_fit(); sort(all(counts)); int ans; for (int k = 1; k <= n; k++){ ans = 0; for (auto i = lower_bound(all(counts), k); i != counts.end(); i++){ ans += (*i/k)*k; } printf("%d ", ans); } printf("\n"); } |
English