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;
}
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号