#include <bits/stdc++.h>
using namespace std;
int n, c[100005], vis[100005], ans[100005];
int get_cnt(int k) {
  int res = 0, cnt = 0;
  memset(vis, -1, sizeof(vis));
  for (int i = 1; i <= n; ++i) {
    if (vis[c[i]] == res) continue;
    vis[c[i]] = res;
    cnt++;
    if (cnt > k) {
      res++;
      cnt = 1;
      vis[c[i]] = res;
    }
  }
  return res + 1;
}
void solve(int l, int r) {
  if (l > r) return;
  int cntl = get_cnt(l);
  int cntr = get_cnt(r);
  if (cntl == cntr) {
    for (int i = l; i <= r; ++i) ans[i] = cntl;
    return;
  }
  ans[l] = cntl;
  ans[r] = cntr;
  int mid = (l + r) >> 1;
  solve(l + 1, mid);
  solve(mid + 1, r - 1);
}
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]);
  return 0;
}
