#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 20;
bool used[maxn];
int mem[maxn];
inline int get(const vector<int>& a, int l) {
  if (mem[l] != 0) return mem[l];
  int cnt = 0;
  for (int i = 0; i < a.size(); i++) used[a[i]] = false;
  int i = 0;
  int n = a.size();
  int st = i;
  int life = l;
  while (i < n) {
    if (!used[a[i]]) {
      life--;
    }
    used[a[i]] = true;
    if (life < 0) {
      cnt += 1;
      for (int j = st; j < i; j++) used[a[j]] = false;
      life = l - 1;
      st = i;
    }
    i += 1;
  }
  mem[l] = cnt + 1;
  return cnt + 1;
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  int n = 0;
  cin >> n;
  vector<int> a(n, 0);
  for (int i = 0; i < n; i++) cin >> a[i];
  vector<int> ret(n + 1, 0);
  int l = n;
  while (l > 0) {
    int r = 0;
    int st = l;
    int num_cas = get(a, l);
    while (l - r > 1) {
      int mid = (r + l) / 2;
      int cnt = get(a, mid);
      if (cnt == num_cas)
        l = mid;
      else
        r = mid;
    }
    for (int i = l; i <= st; i++) ret[i] = num_cas;
    l -= 1;
  }
  for (int i = 1; i <= n; i++) cout << ret[i] << " ";
  return 0;
}
