func_code_string: #include <bits/stdc++.h>   using namespace std;   int L = 1;   int R = 0;   int cnt[300005];   int a[300005];   int big[300005][2];   int is1 = 0;   int ap[300005];   vector<int> st;   void in(int id) {     id = a[id];     if (++cnt[id] == 1)       is1++;     else if (cnt[id] == 2)       is1--;   }   void out(int id) {     id = a[id];     if (--cnt[id] == 1)       is1++;     else if (cnt[id] == 0)       is1--;   }   void update(int l, int r) {     while (R < r) in(++R);     while (L > l) in(--L);     while (L < l) out(L++);     while (R > r) out(R--);   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int n;     cin >> n;     a[0] = n + 1;     a[n + 1] = n + 1;     int res = 0;     st.push_back(n + 1);     for (int i = 1; i <= n; i++) {       cin >> a[i];       while (st.back() < a[i]) st.pop_back();       big[i][0] = ap[st.back()];       st.push_back(a[i]);       ap[a[i]] = i;     }     st.clear();     st.push_back(n + 1);     ap[n + 1] = n + 1;     for (int i = n; i >= 1; i--) {       while (st.back() < a[i]) st.pop_back();       big[i][1] = ap[st.back()];       st.push_back(a[i]);       ap[a[i]] = i;     }     for (int i = 1; i <= n; i++) {       int l = max(i - a[i] + 1, big[i][0] + 1);       int r = min(l + a[i] - 1, big[i][1] - 1);       if (l + a[i] - 1 != r) continue;       for (; l <= i; l++) {         update(l, r);         if (is1 == a[i]) res++;         if (++r == big[i][1]) break;       }     }     cout << res;   }   