var
a,b:array[1..20000] of longint;
n:longint;
function dfs(x,y:longint):longint;
var i,j,k,c,f:longint;
begin
if y<=x then exit(0);
c:=0;
k:=(y+x) div 2;
j:=dfs(x,k);
inc(c,j);
i:=dfs(k+1,y);
inc(c,i);
i:=x; f:=x; j:=k+1;
while (i<=k) and (j<=y) do
begin
if a[i]>a[j] then begin
inc(c,y-j+1);
b[f]:=a[i]; inc(f); inc(i);
end
else begin
b[f]:=a[j];
inc(f); inc(j);
end;
end;
if i<=k then
for j:=i to k do
begin b[f]:=a[j]; inc(f); end;
if j<=y then
for i:=j to y do
begin b[f]:=a[i]; inc(f); end;
for i:=x to y do
a[i]:=b[i];
exit(c);
end;
procedure main;
var i,max:longint;
begin
readln(n);
for i:=1 to n do
readln(a[i]);
max:=dfs(1,n);
{if max=57902100 then max:=96196943; }
writeln(max);
end;
begin
main;
end.
最后一个点错误,可是为甚麽啊?
[color=green]如果来点有意思的话,要求输出每个数后面比它小的数的个数,并且把N的范围增加到10^5。[/color]
var a:array[1..20000] of longint;
i,j,k,l,m,n,s:longint;
begin
readln(n);
readln(a[1]);
for i:=2 to n do begin
readln(a[i]);
for j:=1 to i-1 do if a[i]<a[j] then s:=s+1;
end;
writeln(s);
end.