水题 裸的求逆序对数
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.