#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
const long long BIG = 1446803456761533460LL;
const int Big = 336860180;
stringstream sss;
const long long int maxn = 100010;
long long int n;
long long int ar[maxn];
vector<long long int> qs[maxn];
long long int res[maxn];
long long int nxt[maxn];
long long int lst[maxn];
long long int lazy[maxn * 4];
long long int seg[maxn * 4];
void push(long long int x) {
  seg[x * 2] += lazy[x];
  lazy[x * 2] += lazy[x];
  seg[x * 2 + 1] += lazy[x];
  lazy[x * 2 + 1] += lazy[x];
  lazy[x] = 0;
}
void update(long long int li, long long int ri, long long int v,
            long long int x = 1, long long int l = 0, long long int r = n) {
  if (li >= r || l >= ri) {
  } else if (li <= l && r <= ri) {
    seg[x] += v;
    lazy[x] += v;
  } else {
    if (lazy[x]) {
      push(x);
    }
    long long int mid = (l + r) / 2;
    update(li, ri, v, x * 2, l, mid);
    update(li, ri, v, x * 2 + 1, mid, r);
    seg[x] = max(seg[x * 2], seg[x * 2 + 1]);
  }
}
long long int binary_search(long long int v, long long int x = 1,
                            long long int l = 0, long long int r = n) {
  if (seg[x] <= v) return n;
  if (r - l == 1) {
    return l;
  } else {
    if (lazy[x]) {
      push(x);
    }
    long long int mid = (l + r) / 2;
    if (seg[x * 2] <= v) {
      return binary_search(v, x * 2 + 1, mid, r);
    } else {
      return binary_search(v, x * 2, l, mid);
    }
  }
}
void MAIN() {
  cin >> n;
  for (long long int i = (0); i < (n); ++i) {
    cin >> ar[i];
  }
  memset(lst, 20, sizeof lst);
  for (long long int i = (n)-1; i >= (0); --i) {
    nxt[i] = lst[ar[i]];
    lst[ar[i]] = i;
  }
  for (long long int i = (0); i < (n); ++i) {
    if (lst[ar[i]] != -1) {
      update(i, n, 1);
      lst[ar[i]] = -1;
    }
    qs[0].push_back(i + 1);
  }
  for (long long int i = (0); i < (n); ++i) {
    for (auto q : qs[i]) {
      ++res[q];
      long long int idx = binary_search(q);
      qs[idx].push_back(q);
    }
    update(i, n, -1);
    update(nxt[i], n, 1);
  }
  for (long long int i = (0); i < (n); ++i) {
    cout << res[i + 1] << ' ';
  }
  cout << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  sss << R"(
8
1 5 7 8 1 7 6 1
    )";
  MAIN();
  return 0;
}
