Drolca

Apologize To Drolca
随笔 - 28, 文章 - 1, 评论 - 6, 引用 - 0
数据加载中……

hdu 2429 Ping pong

 

#include <iostream>
using namespace std;

const int M=20000+5;
const int Maxn=100000+5;
int skill[M];
int tree[Maxn];
int lmax[M],lmin[M];
int rmax[M],rmin[M];

int lowbit(int t){return t&(-t);}

void add(int i)
{
    
while(i<Maxn)
    
{
        tree[i]
++;
        i
+=lowbit(i);
    }

}

int sum(int i)
{
    
int tot=0;
    
while(i>0)
    
{
        tot
+=tree[i];
        i
-=lowbit(i);
    }

    
return tot;
}


int main()
{
    
int T;
    scanf(
"%d",&T);
    
while(T--)
    
{
        
int n,i;
        scanf(
"%d",&n);
        
        
for(i=1;i<=n;i++)
            scanf(
"%d",&skill[i]);
        memset(tree,
0,sizeof(tree));
        
for(i=1;i<=n;i++)
        
{
            lmin[i]
=sum(skill[i]);
            lmax[i]
=i-lmin[i]-1;
            add(skill[i]);
        }

        memset(tree,
0,sizeof(tree));
        
for(i=n;i>=1;i--)
        
{
            rmin[i]
=sum(skill[i]);
            rmax[i]
=sum(Maxn)-rmin[i];
            add(skill[i]);
        }

        __int64 ans
=0;
        
for(i=1;i<=n;i++)
            ans
+=lmax[i]*rmin[i]+lmin[i]*rmax[i];
        printf(
"%I64d\n",ans);
    }

    
return 0;
}

posted on 2009-09-06 23:41 Drolca 阅读(221) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理