#include <bits/stdc++.h>
using namespace std;
int n, a[100100], ans[100100];
int cnt[100100];
int que(int k) {
  memset(cnt, 0, sizeof(cnt));
  int t = 1, s = 0, p = 1;
  for (int i = 1; i <= n; i++) {
    if ((++cnt[a[i]]) == 1) s++;
    if (s > k) {
      for (int j = p; j < i; j++) cnt[a[j]]--;
      p = i;
      s = 1;
      t++;
    }
  }
  return t;
}
void doit(int l, int r) {
  if (l + 1 >= r) return;
  if (ans[l] == ans[r]) {
    for (int i = l + 1; i < r; i++) ans[i] = ans[l];
    return;
  }
  int mid = (l + r) >> 1;
  ans[mid] = que(mid);
  doit(l, mid);
  doit(mid, r);
  return;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  ans[1] = que(1);
  ans[n] = 1;
  doit(1, n);
  for (int i = 1; i <= n; i++) printf("%d ", ans[i]);
}
