#include <bits/stdc++.h>
using namespace std;
int N;
int Array[100005];
vector<int> Query[100005];
int Next[100005], Last[100005];
int V[100005];
int grp, Cnt[100005], Poz[100005], Ans[100005], Arb[100005];
void Read() {
  cin >> N;
  for (int i = 1; i <= N; i++) cin >> Array[i];
  for (int i = N; i >= 1; i--) {
    if (Last[Array[i]] != 0) Next[i] = Last[Array[i]];
    Last[Array[i]] = i;
  }
}
void Update(int poz, int val) {
  while (poz <= N) {
    Arb[poz] += val;
    poz += (poz & (-poz));
  }
}
int Search(int val) {
  int ans = 0, p = 0;
  for (int step = 17; step >= 0; step--) {
    int shift = (1 << step);
    if (p + shift <= N) {
      if (Arb[p + shift] <= val) {
        val -= Arb[p + shift];
        p += shift;
      }
    }
  }
  return p;
}
void Solve() {
  for (int i = 1; i <= N; i++) Query[1].push_back(i);
  for (int i = 1; i <= N; i++)
    if (Last[i] != 0) Update(Last[i], 1);
  for (int i = 1; i <= N; i++) {
    for (int j = 0; j < Query[i].size(); j++) {
      int q = Query[i][j], p = Search(q);
      Ans[q]++;
      Query[p + 1].push_back(q);
    }
    Update(i, -1);
    if (Next[i] != 0) Update(Next[i], 1);
  }
  for (int i = 1; i <= N; i++) cout << Ans[i] << " ";
  cout << "\n";
}
int main() {
  Read();
  Solve();
  return 0;
}
