func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 100005;   const int sqrtn = 505;   int l = 1, r, sum, cant;   int n, m, p, s[maxn], w[maxn], cnt[maxn], last[maxn], pre[maxn], nxt[maxn],       qwq[maxn][sqrtn], num[maxn];   vector<int> v;   struct node {     int l, r, id;   } a[maxn];   inline bool cmp(node a, node b) {     return a.l / p == b.l / p ? ((a.l / p) & 1 ? a.r < b.r : a.r > b.r)                               : a.l < b.l;   }   inline void add(int x) {     cnt[w[x]]++;     sum += cnt[w[x]] == 1;   }   inline void add_right(int x) {     add(x);     if (cnt[w[x]] != 1 && pre[x]) {       qwq[w[x]][pre[x]]++;       if (qwq[w[x]][pre[x]] == 1) {         num[w[x]]++;         if (num[w[x]] == 2) {           cant++;         }       }     }   }   void add_left(int x) {     add(x);     if (cnt[w[x]] != 1 && nxt[x]) {       qwq[w[x]][nxt[x]]++;       if (qwq[w[x]][nxt[x]] == 1) {         num[w[x]]++;         if (num[w[x]] == 2) {           cant++;         }       }     }   }   inline void del(int x) {     cnt[w[x]]--;     sum -= cnt[w[x]] == 0;   }   inline void del_right(int x) {     del(x);     if (qwq[w[x]][pre[x]] && pre[x]) {       qwq[w[x]][pre[x]]--;       if (qwq[w[x]][pre[x]] == 0) {         num[w[x]]--;         if (num[w[x]] == 1) {           cant--;         }       }     }   }   inline void del_left(int x) {     del(x);     if (qwq[w[x]][nxt[x]] && nxt[x]) {       qwq[w[x]][nxt[x]]--;       if (qwq[w[x]][nxt[x]] == 0) {         num[w[x]]--;         if (num[w[x]] == 1) {           cant--;         }       }     }   }   signed main() {     ios::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     cin >> n;     for (int i = 1; i <= n; i++) {       cin >> w[i];       if (last[w[i]]) {         pre[i] = i - last[w[i]];         nxt[last[w[i]]] = i - last[w[i]];         v.push_back(pre[i]);         v.push_back(nxt[last[w[i]]]);       }       last[w[i]] = i;     }     sort(v.begin(), v.end());     v.erase(unique(v.begin(), v.end()), v.end());     for (int i = 1; i <= n; i++) {     }     p = sqrt(n);     cin >> m;     for (int i = 1; i <= m; i++) {       cin >> a[i].l >> a[i].r;       a[i].id = i;     }     sort(a + 1, a + m + 1, cmp);     for (int i = 1; i <= m; i++) {       while (l > a[i].l) {         add_left(--l);       }       while (r < a[i].r) {         add_right(++r);       }       while (l < a[i].l) {         del_left(l++);       }       while (r > a[i].r) {         del_right(r--);       }       s[a[i].id] = sum + (cant == sum);     }     for (int i = 1; i <= m; i++) {       cout << s[i] <<   n ;     }   }   