hdu2689(逆序对)

http://acm.hdu.edu.cn/showproblem.php?pid=2689

代码:

#include<iostream>

using namespace std;

int c[1010],a[1010],n;

int lowbit(int x)

{

	return x&(-x);

}

int sum(int x)

{

	int sum=0;

	while(x>0)

	{

		sum=sum+c[x];

		x-=lowbit(x);

	}

	return sum;

}

void inster(int x,int i)

{

	while(x<=n)

	{

		c[x]+=i;

		x+=lowbit(x);

	}

}

int main()

{

	int i,b,s;

	while(scanf("%d",&n)>0)

	{

		memset(a,0,sizeof(a));

		memset(c,0,sizeof(c));

		s=0;

		for(i=1;i<=n;i++)

		{

			scanf("%d",&b);

			inster(b,1);      //求b前面小于等于b的数有多少个

			s+=i-sum(b);     //b前面大于b的数有多少个

		}

		printf("%d\n",s);

	}

	return 0;

}

 

 

你可能感兴趣的:(HDU)