#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100000;
int BUCK = 1000;
int N, K, ans[NMAX + 2];
int fr[NMAX + 2];
bool viz[NMAX + 2];
int v[NMAX + 2], kkk[NMAX + 2], cat[NMAX + 2];
int CATE_INT(int kk) {
  int anss = 1;
  int cat = 0;
  for (int i = 1; i <= N; ++i) {
    if (!viz[v[i]] && cat == kk) {
      ++anss;
      for (int j = 1; j <= cat; ++j) viz[fr[j]] = 0;
      cat = 0;
    }
    if (!viz[v[i]]) {
      fr[++cat] = v[i];
      viz[v[i]] = 1;
    }
  }
  for (int i = 1; i <= cat; ++i) viz[fr[i]] = 0;
  return anss;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> N;
  BUCK = (int)sqrt(2.0 * N);
  for (int i = 1; i <= N; ++i) cin >> v[i];
  for (int t = 1; t <= N / BUCK + 1; ++t) {
    int last = 0;
    for (int step = (1 << 17); step; step >>= 1) {
      if (last + step <= N && CATE_INT(last + step) > t) last += step;
    }
    kkk[t] = ++last;
  }
  kkk[0] = N + 1;
  for (int it = BUCK; it >= 1; --it) {
    int start = kkk[it];
    int fin = kkk[it - 1];
    for (int j = start; j < fin; ++j) ans[j] = it;
  }
  for (int i = 1; i <= BUCK; ++i) ans[i] = CATE_INT(i);
  for (int i = 1; i <= N; ++i) cout << ans[i] << ' ';
  return 0;
}
