#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
const int M = 510;
const int MOD = 1e9 + 7;
const long long inf = 1 << 30;
void fre() { freopen("in.txt", "r", stdin); }
inline long long read() {
  long long x = 0, f = 1;
  char c;
  c = getchar();
  while (c > '9' || c < '0') {
    if (c == '-') {
      f = -1;
    }
    c = getchar();
  }
  while (c <= '9' && c >= '0') {
    x = x * 10 + c - '0';
    c = getchar();
  }
  return x * f;
}
const double pi = acos(-1.0);
int n;
int a[N];
int ans[N];
int num[N];
int fun(int k) {
  int res = 0;
  int cnt = 0;
  for (int i = 0; i <= n; i++) num[i] = -1;
  for (int i = 1; i <= n; i++) {
    if (num[a[i]] == res) continue;
    num[a[i]] = res;
    cnt++;
    if (cnt > k) {
      cnt = 1;
      res++;
      num[a[i]] = res;
    }
  }
  return res + 1;
}
void work(int l, int r) {
  if (l > r) return;
  ans[l] = fun(l);
  ans[r] = fun(r);
  if (ans[l] == ans[r]) {
    for (int i = l + 1; i < r; i++) ans[i] = ans[l];
    return;
  }
  work(l + 1, (l + r) >> 1);
  work(((l + r) >> 1) + 1, r - 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  work(1, n);
  for (int i = 1; i <= n; i++) {
    printf("%d ", ans[i]);
  }
  return 0;
}
