#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e5 + 5;
const int SQ = 320;
const long long INF = 1e18;
const long long MOD = 1e9 + 7;
long long gcd(long long a, long long b) { return !b ? a : gcd(b, a % b); }
long long sq(long long x) { return (x * x) % MOD; }
long long modP(long long a, long long b) {
  return (!b ? 1 : (sq(modP(a, b / 2)) * (b % 2 ? a : 1)) % MOD);
}
bool done[maxN];
int n, a[maxN];
int res[maxN];
int pt[maxN];
int f(int x) {
  if (!done[x]) {
    done[x] = true;
    memset(pt, -1, sizeof pt);
    int lt = 1;
    int cnt = x;
    for (int i = 1; i <= n; i++) {
      if (pt[a[i]] < lt) {
        pt[a[i]] = i;
        cnt++;
        if (cnt == x + 1) {
          res[x]++;
          lt = i;
          cnt = 1;
        }
      }
    }
  }
  return res[x];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = 1; i <= min(n, SQ); i++) f(i);
  for (int i = min(n, SQ) + 1; i <= n; i++) {
    int tmp = f(i);
    int l = i;
    int r = n + 1;
    while (r - l > 1) {
      int md = (l + r) / 2;
      if (f(md) == tmp)
        l = md;
      else
        r = md;
    }
    for (int j = i; j <= l; j++) {
      res[j] = tmp;
      done[j] = true;
    }
    i = l;
  }
  for (int i = 1; i <= n; i++) cout << res[i] << " ";
  return 0;
}
