/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.
URL : http://acm.hdu.edu.cn/showproblem.php?pid=2689
Name : 2689 Sort it
Date : Saturday, October 8, 2011
Time Stage : half an hour
Result:
Test Data :
Review :
果然是比较水的题,当然,一开始有点犯蒙,看了下解题报告,
原来是跟逆序数对有关的,自己竟联系不起来,还想着把它们
逐一对换排序呢……
//----------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#define INF 0x7f7f7f7f
#define MAXSIZE 1010
int n ;
int tree[MAXSIZE] ;
int lowbit (int x)
{
return x & (-x) ;
}
void add (int pos, int val)
{
while (pos <= n)
{
tree[pos] += val ;
pos += lowbit (pos) ;
}
}
int getSum (int pos)
{
int sum = 0 ;
while (pos > 0)
{
sum += tree[pos] ;
pos -= lowbit (pos) ;
}
return sum ;
}
int main ()
{
int i, j ;
int x, sum ;
while (scanf ("%d", &n) != EOF)
{
memset (tree, 0, sizeof (tree)) ;
sum = 0 ;
for (i = 1 ; i <= n ; ++i)
{
scanf ("%d", &x) ;
sum += getSum (n) - getSum (x) ;
add (x, 1) ;
}
printf ("%d\n", sum) ;
}
return 0 ;
}