from sys import stdin, stdout from math import sqrt, floor, log2 N = int(stdin.readline()) A = list(map(int, stdin.readline().split())) vis = [False for _ in range(N+1)] def calc(k): global vis pre = 0 res = 0 distinct = k for i in range(N): if not vis[A[i]]: if distinct == k: res += 1 for j in range(pre, i): vis[A[j]] = False distinct = 1 pre = i else: distinct += 1 vis[A[i]] = True for i in range(pre, N): vis[A[i]] = False return res ans = [0 for _ in range(N+1)] B = max(1, floor(sqrt(N * log2(N)))) for i in range(1, B): ans[i] = calc(i) q = (N + B - 1) // B for f in range(1, q+1): ok = N ng = B-1 while ok - ng > 1: mid = (ok + ng) // 2 if calc(mid) <= f: ok = mid else: ng = mid while ok <= N and ans[ok] == 0: ans[ok] = f ok += 1 stdout.write("".join(str(ans[i]) + "\n" for i in range(1, N+1)))