Problem - D - Codeforces(总数-对立方案数)
题目:
思路:
代码:
void solve()
{
int n;
cin>>n;
vector<int> a(n);
for(auto &i: a) cin>>i;
LL ans =0;
for(int x=1; x<11; x++){
vector<int> b(n);
for(int i=0; i<n; i++){
b[i]=(a[i]>x? 1:-1);
}
int sum=n;
vector<int> pref(n);
for(int i=0; i<n; i++){
pref[i]=sum;
sum+=b[i];
}
vector<int> cnt(2*n+1);
sum=n;
int j=0;
for(int i=0; i<n; i++){
if(a[i]==x){
while(j<=i){
cnt[pref[j]]++;
j++;
}
}
sum+=b[i];
ans+=cnt[sum];
}
}
ans=1LL*n*(n+1)/2-ans;
cout<<ans<<'\n';
}