#include <bits/stdc++.h>
using namespace std;
const int MAXN = 500000;
int n;
int a[MAXN+5];
unordered_map<int,int> freq;
vector<int> pos[MAXN+5];
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for(int i=1;i<=n;i++){
cin >> a[i];
freq[a[i]]++;
pos[a[i]].push_back(i);
}
long long total = 1LL * n * (n+1) / 2;
int B = sqrt(n);
// xử lý light
long long bad = 0;
for(auto &p: freq){
int x = p.first, f = p.second;
if(f > B) continue;
auto &vec = pos[x];
vec.insert(vec.begin(),0);
vec.push_back(n+1);
for(int i=1;i+f<= (int)vec.size()-1; i++){
int L = vec[i-1]+1;
int R = vec[i+f]-1;
int midL = vec[i];
int midR = vec[i+f-1];
long long left = midL - L + 1;
long long right = R - midR + 1;
bad += left * right;
}
}
// xử lý heavy
vector<int> heavy;
for(auto &p: freq){
if(p.second > B) heavy.push_back(p.first);
}
for(int x: heavy){
vector<int> S(n+1,0);
for(int i=1;i<=n;i++){
if(a[i]==x) S[i] = S[i-1]+1;
else S[i] = S[i-1]-1;
}
unordered_map<int,int> cnt;
cnt.reserve(2*n);
cnt.max_load_factor(0.7);
cnt[0]=1;
long long cur=0;
for(int i=1;i<=n;i++){
if(S[i]==S[i-1]+1){
cur += cnt[S[i]];
}else{
cur -= cnt[S[i]];
}
bad += cur;
cnt[S[i]]++;
}
}
cout << total - bad << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDUwMDAwMDsKaW50IG47CmludCBhW01BWE4rNV07CnVub3JkZXJlZF9tYXA8aW50LGludD4gZnJlcTsKdmVjdG9yPGludD4gcG9zW01BWE4rNV07CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBjaW4gPj4gbjsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgICAgICBmcmVxW2FbaV1dKys7CiAgICAgICAgcG9zW2FbaV1dLnB1c2hfYmFjayhpKTsKICAgIH0KCiAgICBsb25nIGxvbmcgdG90YWwgPSAxTEwgKiBuICogKG4rMSkgLyAyOwogICAgaW50IEIgPSBzcXJ0KG4pOwoKICAgIC8vIHjhu60gbMO9IGxpZ2h0CiAgICBsb25nIGxvbmcgYmFkID0gMDsKICAgIGZvcihhdXRvICZwOiBmcmVxKXsKICAgICAgICBpbnQgeCA9IHAuZmlyc3QsIGYgPSBwLnNlY29uZDsKICAgICAgICBpZihmID4gQikgY29udGludWU7CiAgICAgICAgYXV0byAmdmVjID0gcG9zW3hdOwogICAgICAgIHZlYy5pbnNlcnQodmVjLmJlZ2luKCksMCk7CiAgICAgICAgdmVjLnB1c2hfYmFjayhuKzEpOwogICAgICAgIGZvcihpbnQgaT0xO2krZjw9IChpbnQpdmVjLnNpemUoKS0xOyBpKyspewogICAgICAgICAgICBpbnQgTCA9IHZlY1tpLTFdKzE7CiAgICAgICAgICAgIGludCBSID0gdmVjW2krZl0tMTsKICAgICAgICAgICAgaW50IG1pZEwgPSB2ZWNbaV07CiAgICAgICAgICAgIGludCBtaWRSID0gdmVjW2krZi0xXTsKICAgICAgICAgICAgbG9uZyBsb25nIGxlZnQgPSBtaWRMIC0gTCArIDE7CiAgICAgICAgICAgIGxvbmcgbG9uZyByaWdodCA9IFIgLSBtaWRSICsgMTsKICAgICAgICAgICAgYmFkICs9IGxlZnQgKiByaWdodDsKICAgICAgICB9CiAgICB9CgogICAgLy8geOG7rSBsw70gaGVhdnkKICAgIHZlY3RvcjxpbnQ+IGhlYXZ5OwogICAgZm9yKGF1dG8gJnA6IGZyZXEpewogICAgICAgIGlmKHAuc2Vjb25kID4gQikgaGVhdnkucHVzaF9iYWNrKHAuZmlyc3QpOwogICAgfQoKICAgIGZvcihpbnQgeDogaGVhdnkpewogICAgICAgIHZlY3RvcjxpbnQ+IFMobisxLDApOwogICAgICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKXsKICAgICAgICAgICAgaWYoYVtpXT09eCkgU1tpXSA9IFNbaS0xXSsxOwogICAgICAgICAgICBlbHNlIFNbaV0gPSBTW2ktMV0tMTsKICAgICAgICB9CgogICAgICAgIHVub3JkZXJlZF9tYXA8aW50LGludD4gY250OwogICAgICAgIGNudC5yZXNlcnZlKDIqbik7CiAgICAgICAgY250Lm1heF9sb2FkX2ZhY3RvcigwLjcpOwogICAgICAgIGNudFswXT0xOwoKICAgICAgICBsb25nIGxvbmcgY3VyPTA7CiAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgICAgICBpZihTW2ldPT1TW2ktMV0rMSl7CiAgICAgICAgICAgICAgICBjdXIgKz0gY250W1NbaV1dOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGN1ciAtPSBjbnRbU1tpXV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYmFkICs9IGN1cjsKICAgICAgICAgICAgY250W1NbaV1dKys7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgdG90YWwgLSBiYWQgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9Cg==