func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 228;   const int big = 2e9;   const int md = 1e9 + 7;   struct node {     int l, r, s;   };   int n, m, a[N], pr[N], root[N], k, tex, jj;   node t[N * 40];   bool ok;   void build(int v, int l, int r) {     if (l == r) return;     t[v].l = ++k;     t[v].r = ++k;     int d = (l + r) >> 1;     build(t[v].l, l, d);     build(t[v].r, d + 1, r);   }   void update(int v, int l, int r, int ps, int vl) {     if (l == r) {       t[++k].s = vl;       return;     }     int d = (l + r) >> 1;     if (ps <= d) {       update(t[v].l, l, d, ps, vl);       t[++k].l = k - 1;       t[k].r = t[v].r;     } else {       update(t[v].r, d + 1, r, ps, vl);       t[++k].r = k - 1;       t[k].l = t[v].l;     }     t[k].s = t[t[k].l].s + t[t[k].r].s;   }   void mod(int v, int l, int r, int ps, int vl) {     if (l == r) {       t[v].s = vl;       return;     }     int d = (l + r) >> 1;     if (ps <= d)       mod(t[v].l, l, d, ps, vl);     else       mod(t[v].r, d + 1, r, ps, vl);     t[v].s = t[t[v].l].s + t[t[v].r].s;   }   int go(int v, int l, int r) {     if (l == r) return l;     int d = (l + r) >> 1;     if (t[t[v].l].s >= tex)       return go(t[v].l, l, d);     else {       tex -= t[t[v].l].s;       return go(t[v].r, d + 1, r);     }   }   void nx(int v, int tl, int tr, int l, int r) {     if (l > r || ok) return;     if (tl == l && tr == r) {       if (tex <= t[v].s) {         ok = 1;         jj = go(v, l, r);       } else         tex -= t[v].s;       return;     }     int d = (tl + tr) >> 1;     nx(t[v].l, tl, d, l, min(r, d));     nx(t[v].r, d + 1, tr, max(l, d + 1), r);   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cin >> n;     for (int i = 1; i <= n; i++) cin >> a[i];     k = 1;     root[n + 1] = 1;     build(1, 1, n);     for (int i = n; i >= 1; i--) {       update(root[i + 1], 1, n, i, 1);       if (pr[a[i]] != 0) update(k, 1, n, pr[a[i]], 0);       root[i] = k;       pr[a[i]] = i;     }     for (int i = 1; i <= n; i++) {       int j = 1, ans = 0;       ok = 1;       while (j <= n && ok) {         ans++;         tex = i + 1;         ok = 0;         nx(root[j], 1, n, j, n);         j = jj;       }       cout << ans <<    ;     }     return 0;   }   