#include <bits/stdc++.h>
using namespace std;
long long n, k, tot;
long long a[100002], ans[100002], freq[320 + 2][100002];
long long l[320 + 2], r[320 + 2], sum[320 + 2], occur[100002];
void slow(long long x) {
  memset(occur, -1, sizeof occur);
  long long cnt = 0, ret = 1;
  for (int i = 1; i <= n; i++) {
    if (occur[a[i]] != ret) {
      cnt++, occur[a[i]] = ret;
      if (cnt > x) occur[a[i]] = ++ret, cnt = 1;
    }
  }
  ans[x] = ret;
}
void precalc() {
  long long cnt = 0;
  l[tot] = 1;
  for (int i = 1; i <= n; i++) {
    if (!freq[tot][a[i]]) {
      cnt++;
      if (cnt > k) {
        r[tot] = i - 1, sum[tot] = k;
        freq[++tot][a[i]]++;
        cnt = 1, l[tot] = i;
      } else
        freq[tot][a[i]]++;
    } else
      freq[tot][a[i]]++;
  }
  r[tot] = n, sum[tot] = cnt;
  ans[k] = tot + 1, k++;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(), cout.tie();
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (k = 1; (k * k) <= n; k++) slow(k);
  precalc();
  for (; k <= n; k++) {
    long long id = 0, cur = 1;
    for (int i = 1; i <= tot; i++) {
      while (l[i] <= r[i]) {
        if (!freq[id][a[l[i]]]) {
          if ((sum[id] + 1) > k) id++;
          if (id == i) break;
          sum[id]++;
          if (r[id] < cur) l[id] = l[i], r[id] = l[i] - 1;
        }
        freq[id][a[l[i]]]++;
        freq[i][a[l[i]]]--;
        if (!freq[i][a[l[i]]]) sum[i]--;
        r[id]++, l[i]++, cur = r[id];
      }
    }
    ans[k] = id + 1;
    tot = id;
  }
  for (int i = 1; i <= n; i++) cout << ans[i] << " ";
  cout << endl;
  return 0;
}
