#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<cmath>
#define MAX 100010
using namespace std;
long long c[MAX];
int seq[MAX];
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int n)
{
while(x<=n)
{
c[x]++;
x+=lowbit(x);
}
}
long long int query(int x)
{
long long int sum=0;
while(x>0)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
}
int main()
{
int t,n,i;
int ca=0;
long long sum=0;
long long num=0;
long long num2=0;
scanf("%d",&t);
while(t--)
{
printf("Case #%d: ",++ca);
memset(c,0,sizeof(c));
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&seq[i]);
num2=query(seq[i]);
num=(long long)(n-i-seq[i]+1)+num2;
if(num>=2)
sum+=num*(num-1)/2;
sum-=num*num2;
add(seq[i],n);
}
printf("%lld\n",sum%100000007);
}
}
hdu4000
最新推荐文章于 2019-09-21 03:11:20 发布