#include <bits/stdc++.h>
using namespace std;
struct vertex {
  vertex *l, *r;
  long long int sum;
  vertex(long long int val) : l(NULL), r(NULL), sum(val) {}
  vertex(vertex* l, vertex* r) : l(l), r(r), sum(0) {
    if (l) sum += l->sum;
    if (r) sum += r->sum;
  }
};
vertex* upd[200005];
long long int n, nxt[200005], a[200005];
vertex* build(long long int tl, long long int tr) {
  if (tl == tr) return new vertex(a[tl]);
  long long int tm = (tl + tr) / 2;
  return new vertex(build(tl, tm), build(tm + 1, tr));
}
long long int nxt_find(vertex* t, long long int tl, long long int tr,
                       long long int k) {
  if (t->sum < k) return tr + 1;
  if (t->sum == k) return tr;
  if (tl == tr) return tl - 1;
  long long int tm = (tl + tr) / 2;
  if (t->l->sum > k) return nxt_find(t->l, tl, tm, k);
  return nxt_find(t->r, tm + 1, tr, k - t->l->sum);
}
vertex* update(vertex* t, long long int tl, long long int tr, long long int pos,
               long long int new_val) {
  if (tl == tr) return new vertex(new_val);
  long long int tm = (tl + tr) / 2;
  if (pos <= tm)
    return new vertex(update(t->l, tl, tm, pos, new_val), t->r);
  else
    return new vertex(t->l, update(t->r, tm + 1, tr, pos, new_val));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  map<long long int, long long int> tem;
  for (long long int i = 1; i <= n; ++i) {
    long long int v;
    cin >> v;
    if (tem.find(v) != tem.end())
      nxt[tem[v]] = i;
    else
      a[i] = 1;
    tem[v] = i;
  }
  for (auto& xp : tem) nxt[xp.second] = n + 1;
  upd[1] = build(1, n);
  for (long long int i = 2; i <= n; ++i) {
    upd[2 * i - 2] = update(upd[2 * i - 3], 1, n, i - 1, 0);
    if (nxt[i - 1] <= n)
      upd[2 * i - 1] = update(upd[2 * i - 2], 1, n, nxt[i - 1], 1);
    else
      upd[2 * i - 1] = upd[2 * i - 2];
  }
  for (long long int k = 1; k <= n; ++k) {
    long long int cur = 1, ans = 0;
    while (cur <= n) {
      cur = nxt_find(upd[2 * cur - 1], 1, n, k) + 1;
      ans++;
    }
    cout << ans << " ";
  }
  cout << endl;
}
