#include <bits/stdc++.h>
using namespace std;
int sz = 350;
int n;
int a[100001];
int hav[100001];
int col[351][100001];
int tot[351];
int l[351], r[351];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  int top = 0;
  for (int i = 1; i <= min(n, sz); i++) {
    int cnt = 1;
    int cur = 0;
    int pre = 1;
    for (int j = 1; j <= n; j++) {
      if (!hav[a[j]]) cur++;
      hav[a[j]]++;
      if (cur > i) {
        if (i == sz) {
          top++;
          l[top] = pre, r[top] = j - 1;
        }
        cnt++;
        for (int k = pre; k < j; k++) {
          hav[a[k]]--;
          if (!hav[a[k]]) cur--;
        }
        pre = j;
      }
    }
    if (i == sz) {
      top++;
      l[top] = pre, r[top] = n;
    }
    for (int j = pre; j <= n; j++) hav[a[j]]--;
    cout << cnt << ' ';
  }
  if (n <= sz) return 0;
  for (int i = 1; i <= top; i++)
    for (int j = l[i]; j <= r[i]; j++) {
      if (!col[i][a[j]]) tot[i]++;
      col[i][a[j]]++;
    }
  for (int i = sz + 1; i <= n; i++) {
    int ans = 0;
    for (int j = 1; j <= top; j++) {
      while (r[j] < n) {
        int nxt = r[j] + 1;
        if (!col[j][a[nxt]]) {
          if (tot[j] >= i) break;
          tot[j]++;
        }
        col[j][a[nxt]]++;
        r[j]++;
      }
      if (r[j] == n) {
        ans = j;
        break;
      }
      if (r[j] >= r[j + 1]) {
        for (int k = l[j + 1]; k <= r[j + 1]; k++) col[j + 1][a[k]]--;
        tot[j + 1] = 1;
        col[j + 1][a[r[j] + 1]]++;
        l[j + 1] = r[j + 1] = r[j] + 1;
      } else if (r[j] >= l[j + 1]) {
        for (int k = l[j + 1]; k <= r[j]; k++) {
          col[j + 1][a[k]]--;
          if (!col[j + 1][a[k]]) tot[j + 1]--;
        }
        l[j + 1] = r[j] + 1;
      }
    }
    cout << ans << ' ';
  }
}
