Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- #include <map>
- using namespace std;
- #define ll long long
- ll n;
- using namespace std;
- const ll M = (ll)(2e6+1);
- ll a[M];
- map<ll, ll> m;
- ll b[M];
- bool cmp(vector<ll> v1, vector<ll> v2) {
- if (v1[0] == v2[0])
- return v1[1] < v2[1];
- return v1[0] < v2[0];
- }
- int main()
- {
- //freopen("equal.in", "r", stdin);
- //freopen("equal.out", "w", stdout);
- cin >> n;
- for (ll i = 0; i < n; i++) {
- cin >> a[i];
- m[a[i]] += 1;
- }
- vector<vector<ll> > v;
- vector<vector<ll> > v_child;
- for (auto p: m) {
- ll val = p.first;
- bool mult = false;
- for (ll j = val*2; j <= (ll)(1e6); j += val) {
- if (b[j]) {
- mult = true;
- }
- }
- if (mult) v_child.push_back({p.second, p.first});
- v.push_back({p.second, p.first});
- }
- sort(v.begin(), v.end(), cmp);
- sort(v_child.begin(), v_child.end(), cmp);
- vector<ll> ans(n+1);
- ll idx = 0;
- ll elim = 0;
- ll bins = v_child.size();
- for (ll k = 0; k <= n; k++) {
- if (v_child[idx][0] == 0) {
- elim++;
- idx++;
- }
- ans[k] = bins - elim;
- if (idx >= v_child.size()) break;
- if (k != n) v[idx][0]--;
- }
- idx = 0;
- elim = 0;
- bins = v.size();
- for (ll k = 0; k <= n; k++) {
- if (v[idx][0] == 0) {
- elim++;
- idx++;
- }
- ans[k] = min(ans[k], bins - elim + 1);
- if (idx >= v.size()) break;
- v[idx][0]--;
- }
- for (ll i = 0; i <= n; i++)
- cout << ans[i] << " ";
- cout << endl;
- return 0;
- for (auto vv: v) {
- for (auto x : vv) {
- cout << x << " " ;
- }
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement