内容目录
水题 裸的求逆序对数
Program P2299; const maxn=500100; Var tt,i,j,k,n:longint; a,le,re:array[1..maxn] of longint; ans:int64; procedure mergesort(l,r:longint); var i,j,k,mid:longint; begin if l=r then exit; mid:=(l+r) shr 1; mergesort(l,mid); mergesort(mid+1,r); for i:=l to mid do le[i-l+1]:=a[i]; le[mid+2-l]:=maxlongint; for i:=mid+1 to r do re[i-mid]:=a[i]; re[r+1-mid]:=maxlongint; i:=1;j:=1; for k:=l to r do begin if (le[i]<=re[j]) then begin a[k]:=le[i]; inc(i); end else begin a[k]:=re[j]; inc(j); ans:=mid-l+1-(i-1)+ans; end; end; end; Begin while not eof do begin read(n); if n=0 then break; for i:=1 to n do read(a[i]); ans:=0; mergesort(1,n); writeln(ans); end; end.