#include <bits/stdc++.h>
using namespace std;
using namespace std;
const int MOD = int(1e9) + 7;
const int MOD2 = 1000000009;
const int INF = 1e9;
const int N = int(3e5) + 7;
struct node {
  int sum;
  node* l;
  node* r;
  node(int x) { this->sum = x; }
};
int a[N], b[N];
node* build(int l, int r) {
  if (l == r) {
    node* t = new node(a[r]);
    return t;
  }
  int md = (l + r) / 2;
  node* left = build(l, md);
  node* right = build(md + 1, r);
  node* t = new node(left->sum + right->sum);
  t->l = left;
  t->r = right;
  return t;
}
node* upd(node* t, int l, int r, int pos, int x) {
  if (l == r) {
    node* nt = new node(x);
    return nt;
  }
  int md = (l + r) / 2;
  if (pos <= md) {
    node* left = upd(t->l, l, md, pos, x);
    node* nt = new node(left->sum + t->r->sum);
    nt->r = t->r;
    nt->l = left;
    return nt;
  } else {
    node* right = upd(t->r, md + 1, r, pos, x);
    node* nt = new node(t->l->sum + right->sum);
    nt->l = t->l;
    nt->r = right;
    return nt;
  }
}
int R(node* t, int l, int r, int x) {
  if (l == r) {
    return r;
  }
  int md = (l + r) / 2;
  if (t->l->sum >= x) {
    return R(t->l, l, md, x);
  } else {
    return R(t->r, md + 1, r, x - t->l->sum);
  }
}
int la[N];
int re[N];
node* stree[N];
void solve() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < N; i++) {
    la[i] = -1;
  }
  for (int i = 0; i < n; i++) {
    scanf("%d", &b[i]);
  }
  for (int i = n - 1; i >= 0; i--) {
    re[i] = la[b[i]];
    la[b[i]] = i;
  }
  for (int i = 0; i < N; i++) la[i] = -1;
  for (int i = 0; i < n; i++) {
    if (la[b[i]] == -1) {
      a[i] = 1;
    }
    la[b[i]] = i;
  }
  stree[0] = build(0, n - 1);
  for (int i = 0; i < n; i++) {
    node* t = upd(stree[i], 0, n - 1, i, 0);
    stree[i + 1] = t;
    if (re[i] != -1) {
      stree[i + 1] = upd(t, 0, n - 1, re[i], 1);
    }
  }
  for (int k = 1; k <= n; k++) {
    int l = 0;
    int ans = 0;
    while (l < n) {
      if (stree[l]->sum >= k + 1) {
        l = R(stree[l], 0, n - 1, k + 1);
        ans++;
      } else {
        ans++;
        break;
      }
    }
    printf("%d ", ans);
  }
}
int main() {
  solve();
  return 0;
}
