#include #include #include using namespace std; typedef long long ll; typedef pair P; typedef pair P1; typedef pair P2; #define pu push #define pb push_back #define mp make_pair #define eps 1e-7 #define INF 1000000000 #define fi first #define sc second #define rep(i,x) for(int i=0;i r) return; if(l == r) { ans++; return ;} int m = (l+r)/2; setS; mapM; for(int i=m;i>=l;i--){ M[a[i]]++; if( (m-i+1+1)/2 <= M[a[i]] ) S.insert(a[i]); } M.clear(); for(int i=m+1;i<=r;i++){ M[a[i]]++; if( (i-m+1)/2 <= M[a[i]] ) S.insert(a[i]); } for(auto cand:S){ vectorvi; vi.resize((m-l+1)*2+5,0); int geta = (m-l+3); int cur = 0; for(int i=m;i>=l;i--){ if(a[i] == cand) cur++; else cur--; vi[cur+geta]++; } for(int i=vi.size()-2;i>=0;i--) vi[i] += vi[i+1]; cur = 0; for(int i=m+1;i<=r;i++){ if(a[i] == cand) cur++; else cur--; int need = 1-cur+geta; ans += vi[need]; } } rec(l,m); rec(m+1,r); return; } int main(){ scanf("%d",&n); rep(i,n) scanf("%d",&a[i]); rec(0,n-1); printf("%lld\n",ans); }