#include <bits/stdc++.h>
using namespace std;
int ans[100010];
int nos[100010];
int N;
bool oc[100010];
int dp[100010];
int calc(int k) {
  if (dp[k] != 0) return dp[k];
  int cnt = 1, sofar = 0;
  vector<int> v;
  for (int i = 0; i < N; i++) {
    if (!oc[nos[i]]) {
      sofar += 1;
      v.push_back(nos[i]);
      oc[nos[i]] = true;
    }
    if (sofar > k) {
      for (auto x : v) oc[x] = false;
      cnt += 1;
      v.clear();
      v.push_back(nos[i]);
      oc[nos[i]] = true;
      sofar = 1;
    }
  }
  for (auto x : v) oc[x] = false;
  return dp[k] = cnt;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> N;
  for (int i = 0; i < N; i++) cin >> nos[i];
  int limit = sqrt(N);
  for (int i = 1; i <= limit; i++) ans[i] = calc(i);
  int st = limit + 1;
  while (st != N + 1) {
    int curr = calc(st);
    int lo = st, hi = N;
    while (lo < hi - 1) {
      int mid = (lo + hi) >> 1;
      if (calc(mid) == curr)
        lo = mid;
      else
        hi = mid - 1;
    }
    if (calc(hi) == curr) lo = hi;
    int ed = lo;
    for (int i = st; i <= ed; i++) ans[i] = curr;
    st = ed + 1;
  }
  for (int i = 1; i <= N; i++) cout << ans[i] << " ";
  cout << endl;
  return 0;
}
