#include <bits/stdc++.h>
using namespace std;
inline int Read() {
  char c = getchar();
  int num = 0;
  while ('0' > c || c > '9') c = getchar();
  while ('0' <= c && c <= '9') num = num * 10 + c - '0', c = getchar();
  return (num);
}
int wr[10], wt;
inline void Write(int x) {
  wt = 0;
  while (x) wr[++wt] = x % 10, x /= 10;
  for (int i = wt; i; i--) putchar((char)wr[i] + '0');
  putchar(' ');
}
int rt[200010], t[200010 * 20], ch[200010 * 20][2], a[200010], pr[200010], ans,
    n, N;
inline void Ins(int rt1, int rt, int l, int r, int a, int b) {
  t[rt] = t[rt1] + b;
  int md = (l + r) / 2;
  if (l == r) return;
  if (a <= md) {
    ch[rt][0] = ++N, ch[rt][1] = ch[rt1][1];
    Ins(ch[rt1][0], ch[rt][0], l, md, a, b);
  } else {
    ch[rt][1] = ++N, ch[rt][0] = ch[rt1][0];
    Ins(ch[rt1][1], ch[rt][1], md + 1, r, a, b);
  }
}
inline int Ask(int x, int l, int r, int a) {
  int md = (l + r) / 2;
  if (l == r) {
    if (a < t[x])
      return (n + 1);
    else
      return (l);
  }
  int nm1 = t[ch[x][1]];
  if (nm1 > a)
    return (Ask(ch[x][1], md + 1, r, a));
  else {
    int R = md + 1;
    int L = Ask(ch[x][0], l, md, a - nm1);
    if (L == n + 1)
      return (R);
    else
      return (L);
  }
}
int main() {
  n = Read();
  for (int i = 1; i <= n; i++) a[i] = Read();
  for (int i = 1; i <= n; i++) {
    int rt_ = rt[i - 1];
    Ins(rt_, rt[i] = ++N, 1, n, i, 1);
    if (pr[a[i]]) rt_ = rt[i], Ins(rt_, rt[i] = ++N, 1, n, pr[a[i]], -1);
    pr[a[i]] = i;
  }
  for (int i = 1; i <= n; i++) {
    if (i == 5) int deb = 0;
    ans = 1;
    for (int j = Ask(rt[n], 1, n, i) - 1; j;) {
      ans++;
      j = Ask(rt[j], 1, n, i) - 1;
    }
    Write(ans);
  }
  puts("");
}
