// #pragma GCC target("prefer-vector-width=512") #pragma GCC optimize("Ofast,unroll-loops") #include #include #include using namespace std; constexpr int MX = 100000; constexpr int B = 64; int n; int a[MX]; bool vis[B][MX]; int ans[MX+1]; int calc(int k, int idx) { int pre = 0; int res = 0; int distinct = k; for (int i = 0; i < n; i++) { if (not vis[idx][a[i]]) { if (distinct == k) { res++; for (int j = pre; j < i; j++) vis[idx][a[j]] = false; distinct = 1; pre = i; } else { distinct++; } vis[idx][a[i]] = true; } } for (int i = pre; i < n; i++) vis[idx][a[i]] = false; return res; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; a[i]--; } int i = 0; thread th[B]; for (; i < n; i += B) { for (int j = 0; j < B; j++) { th[j] = thread([&,i,j]{ ans[i+j+1] = calc(i+j+1, j); }); } for (int j = 0; j < B; j++) th[j].join(); } for (; i < n; i++) ans[i+1] = calc(i+1, 0); for (int i = 1; i <= n; i++) cout << ans[i] << "\n"; }