#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5, M = 20 * N;
int v[N], n, a[N], t, pre[N], last[N], p[N], l[M], r[M], s[M];
int build(int a, int b) {
  int i = ++t;
  if (a == b) return i;
  l[i] = build(a, ((a + b) / 2));
  r[i] = build(((a + b) / 2) + 1, b);
  return i;
}
int add(int j, int a, int b, int x) {
  int i = ++t;
  l[i] = l[j];
  r[i] = r[j];
  s[i] = s[j];
  if (a == b) {
    if (x != 0) s[i]++;
    return i;
  }
  if (x <= ((a + b) / 2))
    l[i] = add(l[i], a, ((a + b) / 2), x);
  else
    r[i] = add(r[i], ((a + b) / 2) + 1, b, x);
  s[i] = s[l[i]] + s[r[i]];
  return i;
}
int ask(int i, int a, int b, int x) {
  if (a == b) return s[i];
  if (x <= ((a + b) / 2))
    return ask(l[i], a, ((a + b) / 2), x) + s[r[i]];
  else
    return ask(r[i], ((a + b) / 2) + 1, b, x);
}
int ask(int l, int r) { return r - l + 1 - ask(p[r], 1, n, l); }
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    pre[i] = last[a[i]];
    last[a[i]] = i;
  }
  p[0] = build(1, n);
  for (int i = 1; i <= n; i++) p[i] = add(p[i - 1], 1, n, pre[i]);
  int len = 800;
  for (int k = 1; k <= n; k++) {
    int cnt = 0;
    if (k <= len) {
      int t = 0, st = 1;
      cnt = 1;
      for (int i = 1; i <= n; i++)
        if (!v[a[i]]) {
          t++;
          if (t > k) {
            t = 1, cnt++;
            for (int j = i - 1; j >= st; j--)
              if (v[a[j]]) v[a[j]] = 0;
            st = i;
          }
          v[a[i]] = 1;
        }
      for (int j = n; j >= st; j--)
        if (v[a[j]]) v[a[j]] = 0;
    } else
      for (int i = 1, j; i <= n; i = j + 1) {
        for (int l = i, r = n; l <= r;) {
          int m = (l + r) / 2;
          if (ask(i, m) <= k)
            j = m, l = m + 1;
          else
            r = m - 1;
        }
        cnt++;
      }
    cout << cnt << ' ';
  }
}
