#include #include #include #include using namespace std; int main() { int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; a[i]--; } auto calc = [&] (int k) { vector vis(n); int pre = 0; int res = 0; int distinct = k; for (int i = 0; i < n; i++) { if (not vis[a[i]]) { if (distinct == k) { res++; for (int j = pre; j < i; j++) vis[a[j]] = false; distinct = 1; pre = i; } else { distinct++; } vis[a[i]] = true; } } return res; }; vector ans(n+1); int B = max(1, (int)sqrt(n * log2(n))); for (int i = 1; i < B; i++) ans[i] = calc(i); int q = (n+B-1)/B; for (int f = 1; f <= q; f++) { int ok = n; int ng = B-1; while (ok - ng > 1) { int mid = (ok + ng) / 2; if (calc(mid) <= f) ok = mid; else ng = mid; } for (int i = ok; i <= n and ans[i] == 0; i++) ans[i] = f; } for (int i = 1; i <= n; i++) cout << ans[i] << "\n"; }