#include <bits/stdc++.h>
using namespace std;
template <int N>
struct Fenwick {
  int n, m;
  int f[N];
  Fenwick() {}
  Fenwick(int _n) { init(_n); }
  void init(int _n) {
    n = _n;
    fill_n(f, n + 1, 0);
    for (m = 1; 2 * m <= n; m *= 2)
      ;
  }
  void add(int k, int a) {
    k++;
    while (k <= n) {
      f[k] += a;
      k += k & -k;
    }
  }
  int sum(int k) {
    int res = 0;
    while (k > 0) {
      res += f[k];
      k -= k & -k;
    }
    return res;
  }
  int lb(int x) {
    if (x == 0) return 0;
    int res = 0;
    for (int len = m; len >= 1; len /= 2) {
      if (res + len <= n && x > f[res + len]) {
        res += len;
        x -= f[res];
      }
    }
    return res + 1;
  }
};
const int N = 100010;
int n;
int a[N];
int memo[N], nx[N];
int res[N];
vector<int> que[N];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
    memo[a[i]] = n;
  }
  for (int i = n - 1; i >= 0; i--) {
    nx[i] = memo[a[i]];
    memo[a[i]] = i;
  }
  Fenwick<N> fw(n);
  for (int i = 0; i < n; i++) {
    if (memo[a[i]] == i) fw.add(i, 1);
  }
  for (int i = 1; i <= n; i++) {
    que[0].push_back(i);
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < (int)que[i].size(); j++) {
      int x = que[i][j];
      int ni = fw.lb(x + 1) - 1;
      que[ni].push_back(x);
      res[x]++;
    }
    fw.add(i, -1);
    fw.add(nx[i], 1);
  }
  for (int i = 1; i <= n; i++) {
    printf("%d%c", res[i], " \n"[i == n]);
  }
  return 0;
}
