// UUID: 7ebc3345-7eff-46a2-ba7f-8cd2016a1e6c
#include <bits/stdc++.h>
using namespace std;
const int gy=1250,c=4e5+12;
using ll = long long;
ll ans;
int n;
int val[c],g[c],h[c];
void query(int r){
    while (r >= 0){
        ans += val[r];
        r = g[r];
	}
}
void upd(int idx, int delta) {
        for (; idx < 2*n+1; idx = h[idx])
            val[idx] += delta;
}
int main() {
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	for(int i=0; i<=2*n+5; i++)
	{
		g[i]=(i&(i+1))-1;
		h[i]=(i|(i+1));
	}
	vector<int> pontok{0},v(n+1);
	for(int i=1; i<=n; i++)
	{
		cin>>v[i];
		pontok.push_back(v[i]);
	}
	sort(pontok.begin(),pontok.end());
	pontok.erase(unique(pontok.begin(),pontok.end()),pontok.end());
	for(int i=1; i<=n; i++)
	{
		v[i]=lower_bound(pontok.begin(),pontok.end(),v[i])-pontok.begin();
	}
	int mer=pontok.size();
	vector<int> cnt(mer);
	for(int i=1; i<=n; i++)
	{
		cnt[v[i]]++;
	}
	vector<int> db(mer);
	for(int kezd=1; kezd<=n; kezd++)
	{
		int tmp=0;
		for(int i=kezd; i<=min(n,kezd+2*gy); i++)
		{
			if(++db[v[i]]>db[tmp]) tmp=v[i];
			int f=i-kezd+1;
			if(db[tmp]>f/2 && cnt[tmp]<gy) ans++;
		}
		for(int i=kezd; i<=min(n,kezd+2*gy); i++)
			db[v[i]]=0;
	}
		for(int e=1; e<mer; e++)
		{
			if(cnt[e]>=gy)
			{
				for(int i=0; i<=2*n; i++)
					val[i]=0;
				int pref=0;
				upd(n,1);
				for(int i=1; i<=n; i++)
				{
					if(v[i]==e) pref++;
					else pref--;
					query(pref+n-1);
					upd(pref+n,1);
				}
			}
		}
	cout<<ans<<"\n";
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |