#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using vi = vector<int>; using vb = vector<bool>; using vc = vector<char>; using vvc = vector<vc>; using vvi = vector<vi>; using vvb = vector<vb>; using vpii = vector<pii>; using vpll = vector<pll>; using vll = vector<ll>; using vull = vector<ull>; using vvll = vector<vll>; using namespace __gnu_pbds; template <typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; #define f first #define s second #define pb emplace_back #define rep(i, begin, end) for (auto i = (begin); i <= (end); ++i) #define repr(i, begin, end) for (auto i = (begin); i >= (end); --i) #define bend(X) X.begin(), X.end() #ifdef LOCAL template <typename T> void __deb(const T& x) { cout << x << endl; } template <typename T, typename... Args> void __deb(const T& x, Args... xs) { cout << x << ", "; __deb(xs...); } #define deb(...) do { cout << #__VA_ARGS__ << " = "; __deb(__VA_ARGS__); } while (0) #define say(...) do { __deb(__VA_ARGS__); } while (0) #else #define deb(...) #define say(...) #define endl '\n' #endif constexpr int INF = 1e9 + 1e7; constexpr ll INFl = INF; constexpr ll INFll = 1e18 + 1e16; void print() { cout << '\n'; } template <typename T1, typename T2> ostream &operator<<(ostream &os, pair<T1, T2> x) { os << x.f << ' ' << x.s; return os; } template <typename T1, typename T2> istream &operator>>(istream &is, pair<T1, T2> &x) { is >> x.f >> x.s; return is; } template <typename Ch, typename Tr, typename T> ostream &operator<<(basic_ostream<Ch, Tr> &os, T x) { for (auto i : x) os << i << ' '; return os; } template <typename T> istream &operator>>(istream &is, vector<T> &x) { for (T &i : x) is >> i; return is; } template <typename T, typename... Args> void print(T x, Args... args) { cout << x << ' '; print(args...); } template <typename T1, typename T2> pair<T1, T2> operator+(const pair<T1, T2> &A, const pair<T1, T2> &B) { return {A.f + B.f, A.s + B.s}; } template <typename T1, typename T2> pair<T1, T2> operator-(const pair<T1, T2> &A, const pair<T1, T2> &B) { return {A.f - B.f, A.s - B.s}; } template <typename T1, typename T2> pair<T1, T2> &operator+=(pair<T1, T2> &A, const pair<T1, T2> &B) { A.f += B.f; A.s += B.s; return A; } template <typename T1, typename T2> pair<T1, T2> &operator-=(pair<T1, T2> &A, const pair<T1, T2> &B) { A.f -= B.f; A.s -= B.s; return A; } template <typename T1, typename T2> pair<T1, T2> operator-(const pair<T1, T2> &A) { return {-A.f, -A.s}; } template <typename T1, typename T2> bool maxe(T1 &A, const T2 &B) { if (B > A) { A = B; return 1; } return 0; } template <typename T1, typename T2> bool mine(T1 &A, const T2 &B) { if (B < A) { A = B; return 1; } return 0; } struct input { private: int n, m; public: input() : n(0){}; input(int n) : n(0), m(n){}; input(int n, int m) : n(n), m(m + 1){}; template <typename T> operator T() { T x; cin >> x; return x; } template <typename T> operator vector<T>() { vector<T> v(m); for (int i = n; i < m; i++) cin >> v[i]; return v; } template <typename T> operator set<T>() { T x; set<T> s; for (int i = n; i < m; i++) { cin >> x; s.emplace(x); } return s; } }; class Nic { } nic; template <typename T> Nic operator<<(Nic, T) { return nic; } Nic operator<<(ostream &, Nic) { return nic; } constexpr int mod = 1e9 + 7; ////////////////////////////////////////////////// auto solve() { int n = input(); vi R(n+1); map<int, int> M; for (const int x : vi(input(n))) M[x]++; for (const auto [_, x] : M) rep (i, 1, x) R[i] += x - x % i; rep (i, 1, n) cout << R[i] << " "; cout << endl; return nic; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int noOfTests = 1; // cin >> noOfTests; while (noOfTests-- > 0) cout << 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int, int>; using pll = pair<ll, ll>; using vi = vector<int>; using vb = vector<bool>; using vc = vector<char>; using vvc = vector<vc>; using vvi = vector<vi>; using vvb = vector<vb>; using vpii = vector<pii>; using vpll = vector<pll>; using vll = vector<ll>; using vull = vector<ull>; using vvll = vector<vll>; using namespace __gnu_pbds; template <typename T> using ordered_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; #define f first #define s second #define pb emplace_back #define rep(i, begin, end) for (auto i = (begin); i <= (end); ++i) #define repr(i, begin, end) for (auto i = (begin); i >= (end); --i) #define bend(X) X.begin(), X.end() #ifdef LOCAL template <typename T> void __deb(const T& x) { cout << x << endl; } template <typename T, typename... Args> void __deb(const T& x, Args... xs) { cout << x << ", "; __deb(xs...); } #define deb(...) do { cout << #__VA_ARGS__ << " = "; __deb(__VA_ARGS__); } while (0) #define say(...) do { __deb(__VA_ARGS__); } while (0) #else #define deb(...) #define say(...) #define endl '\n' #endif constexpr int INF = 1e9 + 1e7; constexpr ll INFl = INF; constexpr ll INFll = 1e18 + 1e16; void print() { cout << '\n'; } template <typename T1, typename T2> ostream &operator<<(ostream &os, pair<T1, T2> x) { os << x.f << ' ' << x.s; return os; } template <typename T1, typename T2> istream &operator>>(istream &is, pair<T1, T2> &x) { is >> x.f >> x.s; return is; } template <typename Ch, typename Tr, typename T> ostream &operator<<(basic_ostream<Ch, Tr> &os, T x) { for (auto i : x) os << i << ' '; return os; } template <typename T> istream &operator>>(istream &is, vector<T> &x) { for (T &i : x) is >> i; return is; } template <typename T, typename... Args> void print(T x, Args... args) { cout << x << ' '; print(args...); } template <typename T1, typename T2> pair<T1, T2> operator+(const pair<T1, T2> &A, const pair<T1, T2> &B) { return {A.f + B.f, A.s + B.s}; } template <typename T1, typename T2> pair<T1, T2> operator-(const pair<T1, T2> &A, const pair<T1, T2> &B) { return {A.f - B.f, A.s - B.s}; } template <typename T1, typename T2> pair<T1, T2> &operator+=(pair<T1, T2> &A, const pair<T1, T2> &B) { A.f += B.f; A.s += B.s; return A; } template <typename T1, typename T2> pair<T1, T2> &operator-=(pair<T1, T2> &A, const pair<T1, T2> &B) { A.f -= B.f; A.s -= B.s; return A; } template <typename T1, typename T2> pair<T1, T2> operator-(const pair<T1, T2> &A) { return {-A.f, -A.s}; } template <typename T1, typename T2> bool maxe(T1 &A, const T2 &B) { if (B > A) { A = B; return 1; } return 0; } template <typename T1, typename T2> bool mine(T1 &A, const T2 &B) { if (B < A) { A = B; return 1; } return 0; } struct input { private: int n, m; public: input() : n(0){}; input(int n) : n(0), m(n){}; input(int n, int m) : n(n), m(m + 1){}; template <typename T> operator T() { T x; cin >> x; return x; } template <typename T> operator vector<T>() { vector<T> v(m); for (int i = n; i < m; i++) cin >> v[i]; return v; } template <typename T> operator set<T>() { T x; set<T> s; for (int i = n; i < m; i++) { cin >> x; s.emplace(x); } return s; } }; class Nic { } nic; template <typename T> Nic operator<<(Nic, T) { return nic; } Nic operator<<(ostream &, Nic) { return nic; } constexpr int mod = 1e9 + 7; ////////////////////////////////////////////////// auto solve() { int n = input(); vi R(n+1); map<int, int> M; for (const int x : vi(input(n))) M[x]++; for (const auto [_, x] : M) rep (i, 1, x) R[i] += x - x % i; rep (i, 1, n) cout << R[i] << " "; cout << endl; return nic; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int noOfTests = 1; // cin >> noOfTests; while (noOfTests-- > 0) cout << solve() << '\n'; return 0; } |