【分治逆序数对】来看看吧
pascal吧
全部回复
仅看楼主
level 7
零度主宰 楼主
给定一个序列a1,a2,a3......an,如果存在i<j并且ai>aj,那么就是逆序对,求给定的数据中的逆序对;
输入
n(几个)
a1
a2
......
输入
对数
2012年03月30日 05点03分 1
level 7
零度主宰 楼主
var
a,b:array[1..100000]of integer;
sum,i,n:longint; procedure work(f,l:longint);
var
mid,g,m,k,j:longint;
begin
if f=l then exit;
mid:=(f+l)div 2;
work(f,mid);
work(mid+1,l);
j:=f; m:=f; k:=mid+1;
while (j<=mid)and(k<=l) do
begin
while (a[j]<=a[k])and(j<=mid) do
begin
b[m]:=a[j];
inc(m); inc(j);
end; while (a[j]>a[k])and(k<=l) do
begin
b[m]:=a[k];
sum:=sum+k-mid-1;
inc(k);
end;
end;
while j<=mid do
begin
b[m]:=a[j];
sum:=sum+l-mid-1;
inc(m);
inc(j);
end;
while k<=l do
begin
b[m]:=a[k];
inc(m);
inc(k);
end;
for g:=f to l do
a[g]:=b[g];
end; begin
{assign(input,'deseq.in'); reset(input);
assign(output,'deseq.out'); rewrite(output);}
sum:=0;
readln(n);
for i:=1 to n do readln(a[i]);
work(1,n);
writeln(sum);
{close(input); close(output);}
end.
不晓得怎么输不出结果
PS还不是跪了
2012年03月30日 05点03分 2
level 12
( ^_^ )不错嘛
2015年07月28日 15点07分 3
1