Chinaunix首页 | 论坛 | 博客
  • 博客访问: 35015
  • 博文数量: 13
  • 博客积分: 933
  • 博客等级: 军士长
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-11 21:01
文章分类

全部博文(13)

文章存档

2011年(1)

2010年(12)

最近访客

分类:

2010-03-18 10:13:24

//结果需要long long
#include
int milk[500001];
int temp[500001];
int cowNum;
long long res;
void mergesort(int *a,int start,int end);
void mymerge(int *a,int start,int mid,int end);
int mymax(int a,int b)
{
 return (a>b?a:b);
}
int main()
{
 int n,i;
 while(scanf("%d",&n)&&n!=0)
 {
  for(i=0;i  {
   scanf("%d",&milk[i]);
  }
  res=0;
  mergesort(milk,0,n-1);
  printf("%lld\n",res);
 }
 return 0;
}

void mergesort(int *a,int start,int end)
{
 if(end==start)
  return;
 int mid=(start+end)/2;
 mergesort(a,start,mid);
 mergesort(a,mid+1,end);
 mymerge(a,start,mid,end);
}
void mymerge(int *a,int start,int mid,int end)
{
 int i,length,leftpos,rightpos,count;
 length=mymax(mid-start+1,end-mid);
 leftpos=count=start;
 rightpos=mid+1;
 while(leftpos<=mid&&rightpos<=end)
 {
  if(a[leftpos]  {
   temp[count++]=a[leftpos++];
  }
  else
  {
   temp[count++]=a[rightpos++];
   res+=mid-leftpos+1;
  }
 }
 if(leftpos>mid)
 {
  while(rightpos<=end)
  {
   temp[count++]=a[rightpos++];
  }
 }
 if(rightpos>end)
 {
  while(leftpos<=mid)
  {
   temp[count++]=a[leftpos++];
  }
 }
 for(i=start;i<=end;i++)
 {
  a[i]=temp[i];
 }
}
阅读(975) | 评论(0) | 转发(0) |
0

上一篇:POJ 2388

下一篇:First time in topcoder

给主人留下些什么吧!~~