#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 1000000000;
const int maxn = 100010;
int a[maxn], vis[maxn], ans[maxn];
int n;
int get_num(int k) {
  int res = 0, cnt = 0;
  memset(vis, -1, sizeof(vis));
  for (int i = 1; i <= n; i++) {
    if (vis[a[i]] == res) continue;
    vis[a[i]] = res;
    cnt++;
    if (cnt > k) {
      res++;
      vis[a[i]] = res;
      cnt = 1;
    }
  }
  return res + 1;
}
void solve(int l, int r) {
  if (l > r) return;
  int cnt1 = get_num(l);
  int cnt2 = get_num(r);
  if (cnt1 == cnt2) {
    for (int i = l; i <= r; i++) ans[i] = cnt1;
    return;
  }
  ans[l] = cnt1;
  ans[r] = cnt2;
  int mid = (l + r) / 2;
  solve(l + 1, mid);
  solve(mid, r - 1);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  solve(1, n);
  for (int i = 1; i <= n; i++) {
    if (i != 1) printf(" ");
    printf("%d", ans[i]);
  }
  return 0;
}
