// ROOT : DRAGON3012009 : Wa In Real Life
#include <bits/stdc++.h>
#define ll int
#define el "\n"
#define _ROOT_ int main()
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 1000001
#define OFFSET 500000
#define INF (1ll<<60)
#define BLOCK 425
#define NAME "file"
#define debug(a) cerr << #a << " = " << a << endl ;
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
ll n, q ;
ll a[MAXN];
ll cnt[MAXN ] ;
ll freg[MAXN ] ;
ll cur[MAXN ] ;
vector<ll> cpr ;
void init()
{
cin >> n ;
FOR(i, 1, n ) cin >> a[i] ;
FOR(i, 1, n ) cpr.push_back(a[i]) ;
compare(cpr ) ;
FOR(i, 1, n ) a[i] = lower_bound(cpr.begin(), cpr.end(), a[i] ) - cpr.begin() + 1 ;
}
void solve()
{
long long ans = 0 ;
FOR(i, 1, n ) cnt[a[i]] ++ ;
ll val = cpr.size() ;
FOR(value, 1, val )
{
if(cnt[value ] < BLOCK ) continue ;
ll tot = 0 ;
ll sum = 0 ;
ll ex = 0 ;
freg[OFFSET ] = 1 ;
FOR(i, 1, n )
{
if(a[i] == value )
{
sum ++ ;
tot += freg[OFFSET + sum - 1] ;
ans += tot ;
ex += tot ;
}
else if(a[i] != value )
{
sum -- ;
tot -= freg[OFFSET + sum ] ;
ans += tot ;
ex += tot ;
}
freg[sum + OFFSET ] ++ ;
// debug(tot ) ;
// debug(value ) ;
}
// debug(ex ) ;
sum = 0 ;
freg[OFFSET ] = 0 ;
FOR(i, 1, n )
{
if(a[i] == value ) sum ++ ;
else sum -- ;
freg[OFFSET + sum ] = freg[OFFSET + sum - 1 ] = freg[OFFSET + sum + 1 ] = 0 ;
}
}
FOR(i, 1, n )
{
ll lim = i + 2 * BLOCK ;
lim = min(lim, n ) ;
pair<ll,ll> fr = {0, 0 } ;
FOR(j, i, lim )
{
cur[a[j]] ++ ;
fr = max(fr, {cur[a[j]], a[j] }) ;
if(cnt[fr.se ] < BLOCK && fr.fi * 2 > j - i + 1 ) ans ++ ;
}
FOR(j, i, lim ) cur[a[j]] = 0 ;
}
cout << ans << el ;
}
_ROOT_
{
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1; // cin >> t ;
while(t--)
{
init();
solve();
}
return (0&0);
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkgOiBXYSBJbiBSZWFsIExpZmUKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgaW50CiNkZWZpbmUgZWwgIlxuIgojZGVmaW5lIF9ST09UXyBpbnQgbWFpbigpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAxMDAwMDAxCiNkZWZpbmUgT0ZGU0VUIDUwMDAwMAojZGVmaW5lIElORiAoMWxsPDw2MCkKI2RlZmluZSBCTE9DSyA0MjUKI2RlZmluZSBOQU1FICJmaWxlIgojZGVmaW5lIGRlYnVnKGEpIGNlcnIgPDwgI2EgPDwgIiA9ICIgPDwgYSA8PCBlbmRsIDsKI2RlZmluZSBjb21wYXJlKHYpIHNvcnQoKHYpLmJlZ2luKCksICh2KS5lbmQoKSk7ICh2KS5lcmFzZSh1bmlxdWUoKHYpLmJlZ2luKCksICh2KS5lbmQoKSksICh2KS5lbmQoKSk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CgpsbCBuLCBxIDsKbGwgYVtNQVhOXTsKbGwgY250W01BWE4gXSA7CmxsIGZyZWdbTUFYTiBdIDsKbGwgY3VyW01BWE4gXSA7CnZlY3RvcjxsbD4gY3ByIDsKCnZvaWQgaW5pdCgpCnsKICAgIGNpbiA+PiBuIDsKICAgIEZPUihpLCAxLCBuICkgY2luID4+IGFbaV0gOwogICAgRk9SKGksIDEsIG4gKSBjcHIucHVzaF9iYWNrKGFbaV0pIDsKICAgIGNvbXBhcmUoY3ByICkgOwogICAgRk9SKGksIDEsIG4gKSBhW2ldID0gbG93ZXJfYm91bmQoY3ByLmJlZ2luKCksIGNwci5lbmQoKSwgYVtpXSApIC0gY3ByLmJlZ2luKCkgKyAxIDsKfQoKdm9pZCBzb2x2ZSgpCnsKICAgIGxvbmcgbG9uZyBhbnMgPSAwIDsKICAgIEZPUihpLCAxLCBuICkgY250W2FbaV1dICsrIDsKICAgIGxsIHZhbCA9IGNwci5zaXplKCkgOwogICAgRk9SKHZhbHVlLCAxLCB2YWwgKQogICAgewogICAgICAgIGlmKGNudFt2YWx1ZSBdIDwgQkxPQ0sgKSBjb250aW51ZSA7CiAgICAgICAgbGwgdG90ID0gMCA7CiAgICAgICAgbGwgc3VtID0gMCA7CiAgICAgICAgbGwgZXggPSAwIDsKICAgICAgICBmcmVnW09GRlNFVCBdID0gMSA7CiAgICAgICAgRk9SKGksIDEsIG4gKQogICAgICAgIHsKICAgICAgICAgICAgaWYoYVtpXSA9PSB2YWx1ZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN1bSArKyA7CgogICAgICAgICAgICAgICAgdG90ICs9IGZyZWdbT0ZGU0VUICsgc3VtIC0gMV0gOwogICAgICAgICAgICAgICAgYW5zICs9IHRvdCA7CiAgICAgICAgICAgICAgICBleCArPSB0b3QgOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoYVtpXSAhPSB2YWx1ZSApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN1bSAtLSA7CiAgICAgICAgICAgICAgICB0b3QgLT0gZnJlZ1tPRkZTRVQgKyBzdW0gXSA7CiAgICAgICAgICAgICAgICBhbnMgKz0gdG90IDsKICAgICAgICAgICAgICAgIGV4ICs9IHRvdCA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZnJlZ1tzdW0gKyBPRkZTRVQgXSArKyA7Ci8vICAgICAgICAgICAgZGVidWcodG90ICkgOwovLyAgICAgICAgICAgIGRlYnVnKHZhbHVlICkgOwogICAgICAgIH0KLy8gICAgICAgIGRlYnVnKGV4ICkgOwogICAgICAgIHN1bSA9IDAgOwogICAgICAgIGZyZWdbT0ZGU0VUIF0gPSAwIDsKICAgICAgICBGT1IoaSwgMSwgbiApCiAgICAgICAgewogICAgICAgICAgICBpZihhW2ldID09IHZhbHVlICkgc3VtICsrIDsKICAgICAgICAgICAgZWxzZSBzdW0gLS0gOwogICAgICAgICAgICBmcmVnW09GRlNFVCArIHN1bSBdID0gZnJlZ1tPRkZTRVQgKyBzdW0gLSAxIF0gPSBmcmVnW09GRlNFVCArIHN1bSArIDEgXSA9IDAgOwogICAgICAgIH0KICAgIH0KCgogICAgRk9SKGksIDEsIG4gKQogICAgewogICAgICAgIGxsIGxpbSA9IGkgKyAyICogQkxPQ0sgOwogICAgICAgIGxpbSA9IG1pbihsaW0sIG4gKSA7CiAgICAgICAgcGFpcjxsbCxsbD4gZnIgPSB7MCwgMCB9IDsKICAgICAgICBGT1IoaiwgaSwgbGltICkKICAgICAgICB7CiAgICAgICAgICAgIGN1clthW2pdXSArKyA7CiAgICAgICAgICAgIGZyID0gbWF4KGZyLCB7Y3VyW2Fbal1dLCBhW2pdIH0pIDsKICAgICAgICAgICAgaWYoY250W2ZyLnNlIF0gPCBCTE9DSyAmJiBmci5maSAqIDIgPiBqIC0gaSArIDEgKSBhbnMgKysgOwogICAgICAgIH0KICAgICAgICBGT1IoaiwgaSwgbGltICkgY3VyW2Fbal1dID0gMCA7CgogICAgfQogICAgY291dCA8PCBhbnMgPDwgZWwgOwp9CgpfUk9PVF8KewogICAgLy8gZnJlb3BlbihOQU1FIi5pbnAiICwgInIiICwgc3RkaW4pOwogICAgLy8gZnJlb3BlbihOQU1FIi5vdXQiICwgInciLCBzdGRvdXQpIDsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgdCA9IDE7IC8vIGNpbiA+PiB0IDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAoMCYwKTsKfQo=