题意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术。每个人都有一个不同的技能值ai。每场比赛需要3个人:两名选手,一名裁判。他们有一个奇怪的规定,即裁判必须住在两名选手的中间,并且技能值也在两名选手之间。问一共能组织多少种比赛。
#include<iostream>
#include<cstdio>
#include<cstring>
#define mx 100000+10
#define mm 20000+10
using namespace std;
int c[mx],a[mm],n,l[mm],r,mr;
int lowbit(int x)
{
return x & (-x);
}
int sum(int x)
{
int ret=0;
while(x>0)
{
ret+=c[x];x-=lowbit(x);
}
return ret;
}
void add(int x)
{
while(x<=mr)
{
c[x]++;x+=lowbit(x);
}
}
int main()
{
int i,t;
long long sums;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
mr=0;sums=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(mr<a[i]) mr=a[i];
}
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
{
add(a[i]);l[i]=sum(a[i]-1);
}
memset(c,0,sizeof(c));
for(i=n-1;i>=0;i--)
{
add(a[i]);r=sum(a[i]-1);
sums+=l[i]*(n-i-1-r)+r*(i-l[i]);
}
cout<<sums<<endl;
}
return 0;
}