#include <bits/stdc++.h>
using namespace std;
namespace zzc {
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - 48;
    ch = getchar();
  }
  return x * f;
}
const int maxn = 1e5 + 5;
const int blo = 700;
int n;
int a[maxn], pos[maxn], lst[maxn], pre[maxn], ans[maxn];
int count(int x) {
  int num = 0, tmp = 1, stp = 1;
  for (register int i = 2; i <= n; i++) {
    if (pre[i] < stp) {
      if (tmp == x) {
        num++;
        tmp = 0;
        stp = i;
      }
      tmp++;
    }
  }
  if (tmp) num++;
  return num;
}
void solve(int l, int r) {
  int sl = count(l), sr = count(r);
  if (sl == sr) {
    for (register int i = l; i <= r; i++) ans[i] = sl;
    return;
  }
  int mid = (l + r) >> 1;
  solve(l, mid);
  solve(mid + 1, r);
}
void work() {
  n = read();
  for (register int i = 1; i <= n; i++) {
    a[i] = read();
    pre[i] = lst[a[i]];
    lst[a[i]] = i;
  }
  for (register int i = 1; i <= blo; i++) ans[i] = count(i);
  solve(blo + 1, n);
  for (register int i = 1; i <= n; i++) printf("%d ", ans[i]);
}
}  // namespace zzc
int main() {
  zzc::work();
  return 0;
}
