#include<bits/stdc++.h>
#define M 5001
using namespace std;
mt19937_64 rnd(time(0));
int n,a[300001];
long long h[300001],base[300001],pre[300001];
inline int read()
{
int k=0,f=0;char c=getchar();
for(;!isdigit(c);c=getchar()) f|=c=='-';
for(;isdigit(c);c=getchar()) k=(k<<1)+(k<<3)+(c^48);
return f?-k:k;
}
void solve(){
int n; n=read();
for(int i = 1; i <= n; ++i){
a[i]=read();
h[i] = rnd();
base[i] = base[i - 1] ^ h[i];
}
int ans = 0;
for(int i = 1, j = 1; i <= n; ++i){
pre[i] = pre[i - 1] ^ h[a[i]];
if(a[i] == 1) j = 1, ++ans;
else{
j = max(j, a[i]);
if(i >= j && (pre[i] ^ pre[i - j]) == base[j]) ++ans;
}
}
reverse(a + 1, a + n + 1);
for(int i = 1, j = 1; i <= n; ++i){
pre[i] = pre[i - 1] ^ h[a[i]];
if(a[i] == 1) j = 1;
else{
j = max(j, a[i]);
if(i >= j && (pre[i] ^ pre[i - j]) == base[j]) ++ans;
}
}
printf("%d\n",ans);
}
int main()
{
solve();
return 0;
}
714B - Filya and Homework | 31A - Worms Evolution |
1691A - Beat The Odds | 433B - Kuriyama Mirai's Stones |
892A - Greed | 32A - Reconnaissance |
1236D - Alice and the Doll | 1207B - Square Filling |
1676D - X-Sum | 1679A - AvtoBus |
1549A - Gregor and Cryptography | 918C - The Monster |
4B - Before an Exam | 545B - Equidistant String |
1244C - The Football Season | 1696B - NIT Destroys the Universe |
1674A - Number Transformation | 1244E - Minimizing Difference |
1688A - Cirno's Perfect Bitmasks Classroom | 219A - k-String |
952A - Quirky Quantifiers | 451B - Sort the Array |
1505H - L BREAK into program | 171E - MYSTERIOUS LANGUAGE |
630D - Hexagons | 1690D - Black and White Stripe |
1688D - The Enchanted Forest | 1674C - Infinite Replacement |
712A - Memory and Crow | 1676C - Most Similar Words |