讨论 / 大牛看看哪儿错了——fish学数学
yllc 2012-09-15 02:02:00
点我顶贴 收藏 删除
fish学数学

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.

最后一个点错误,可是为甚麽啊?

#1 hades@2009-07-08 05:51:00
回复 删除
不为什么,只是RP问题而已,建议明天再试一下,也许就过了……

嗯,深奥……

#2 Mato完整版@2009-07-08 06:00:00
回复 删除
[color=red]本题巨水。

[color=green]如果来点有意思的话,要求输出每个数后面比它小的数的个数,并且把N的范围增加到10^5。[/color]

#3 yllc@2009-07-09 04:03:00
回复 删除
本题描述有问题!

题写n<20000

但是最后一点n>20000

我仅把数据开大到200000就ac了!

#4 PengMei@2010-08-19 06:19:00
回复 删除
20000也过的啊
#5 renxuandi@2012-09-15 02:02:00
回复 删除
貌似不用这么麻烦吧......

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.

查看更多回复
提交回复