#include <bits/stdc++.h>
using namespace std;
int ans[100010], bl[100010], c[100010];
int n, tim, cnt;
inline int calc(int x) {
  if (ans[x]) return ans[x];
  ans[x] = 1;
  cnt = 0;
  tim++;
  for (int I = 1; I <= n; I++)
    if (bl[c[I]] != tim) {
      cnt++;
      if (cnt > x) {
        cnt = 1;
        tim++;
        ans[x]++;
      }
      bl[c[I]] = tim;
    }
  return ans[x];
}
void solve(int L, int R) {
  if (L > R) return;
  int M = (L + R) >> 1;
  int t = calc(M);
  int l, r, mid, retl, retr;
  l = L, r = M, retl = M;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (calc(mid) == calc(M)) {
      r = mid - 1;
      retl = mid;
    } else
      l = mid + 1;
  }
  l = M, r = R, retr = M;
  while (l <= r) {
    mid = (l + r) >> 1;
    if (calc(mid) == calc(M)) {
      l = mid + 1;
      retr = mid;
    } else
      r = mid - 1;
  }
  for (int I = retl; I <= retr; I++) ans[I] = calc(M);
  solve(L, retl - 1);
  solve(retr + 1, R);
}
int main() {
  scanf("%d", &n);
  for (int I = 1; I <= n; I++) scanf("%d", &c[I]);
  solve(1, n);
  for (int I = 1; I <= n; I++) printf("%d ", ans[I]);
  printf("\n");
  return 0;
}
