#include int a[100005]; int cnt[100005]; int n; int cal(int w) { int count = 0, i, j, res = 1; for (i = j = 0; i < n; i++) { if (cnt[a[i]] > 0) continue; if (count == w) { for (; j < i; j++) cnt[a[j]] = 0; cnt[a[i]]++; count = 1; res++; } else { count++; cnt[a[i]]++; } } for (; j < n; j++) cnt[a[j]] = 0; return res; } int ans[100005]; int main() { scanf("%d", &n); int i, j, k; for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 0; i <= n; i++) ans[i] = -1; for (i = 0; i < n; i++) cnt[i] = 0; for (i = 0; i < n; i++) a[i]--; int sq; for (sq = 1; sq * sq < n; sq++); int min, mid, max, left, right; for (k = 1; k <= sq; k++) ans[k] = cal(k); for (k = sq; k > 0; k--) { min = 0; max = n + 1; while (max - min > 1) { mid = (max + min) / 2; if (cal(mid) > k) min = mid; else max = mid; } left = max; min = 0; max = n + 1; while (max - min > 1) { mid = (max + min) / 2; if (cal(mid) < k) max = mid; else min = mid; } right = max; for (i = left; i < right; i++) ans[i] = k; } for (i = 1; i <= n; i++) printf("%d\n", ans[i]); return 0; }