归并排序求逆序对

来源:互联网 发布:怎样举报淘宝卖家 编辑:程序博客网 时间:2024/05/05 12:35

嗯。。前几天刚刚把它给写掉了。。没时间写文章。。现在把它给补掉把> <

好像没什么好说的。。直接看代码?

Code:

vara,b:array[0..500000] of longint;i,j,k,n:longint;        ans:int64;procedure merge(l,r:longint);var i,j,k,mid:longint;beginmid:=(l+r) shr 1;if l>=r then exit;merge(l,mid);merge(mid+1,r);i:=l; j:=mid+1;  k:=l;repeatif a[i]>a[j] then beginb[k]:=a[j];ans:=ans+mid-i+1;inc(j);inc(k);endelse beginb[k]:=a[i];inc(i);inc(k);end;until ((i>mid) or (j>r));while (i<=mid) dobeginb[k]:=a[i];inc(i);inc(k);end;while (j<=r) dobeginb[k]:=a[j];inc(j);inc(k);end;for i:=l to r do a[i]:=b[i];end;procedure main;beginreadln(n);while (n<>0) dobeginans:=0;for i:=1 to n do read(a[i]);merge(1,n);writeln(ans);        readln(n);end;END;beginmain;end.


 

0 0