求i<j<k且a[i]<a[j]<a[k]的组数
#include <iostream>
#include <cstdio>
using namespace std;
const int N=100001;
int C[N];
int n;
void init()
{
for(int i=1;i<=n;i++)
C[i]=0;
}
int lowerbit(int a)
{
return a&(a^(a-1));
}
void insert(int a)
{
int m=a;
for(;m<=n;m+=lowerbit(m))
{
C[m]++;
}
}
int query(int num)
{
int sum=0;
for(;num>0;num-=lowerbit(num))
{
sum+=C[num];
}
return sum;
}
__int64 tmp ;
__int64 tmp1 ;
int mm;
__int64 ans=0;
int main()
{
int cas;
scanf("%d",&cas);
for(int i=1;i<=cas;i++)
{
scanf("%d",&n);
ans=0;
init();
for(int j=0;j<n;j++)
{
scanf("%d",&mm);
insert(mm);
tmp = query(mm-1);
tmp1 = (n-mm)-(j-1-tmp);
ans-=tmp*tmp1;
if(tmp1>=2)
ans+=tmp1*(tmp1-1)/2;
}
printf("Case #%d: %I64d\n", i, ans%100000007);
}
return 0;
}