var a:array[1..20001]of longint;
n,i,j,sum:longint;
procedure merge(x,y:longint);
var t1,t2:array[1..20001]of longint;
c,len1,len2,mid,p1,p2,k:longint;
begin
if x<y then
begin
mid:=(x+y) div 2;
merge(x,mid);
merge(mid+1,y);
for i:=x to mid do t1[i]:=a[i];
for j:=mid+1 to y do t2[j]:=a[j];
t1[i]:=maxlongint;
t2[j+1]:=maxlongint;
p1:=x;p2:=mid+1;
for k:=x to y do
if t1[p1]<=t2[p2] then
begin
a[k]:=t1[p1];
inc(sum,k-p1);
inc(p1);
end
else
begin
a[k]:=t2[p2];
inc(p2);
end;
end;
end;
begin
readln(n);
for i:=1 to n do readln(a[i]);
sum:=0;
merge(1,n);
write(sum);
end.
t2[y + 1] := MaxLongint;
你那种写法是不是basic里学来的
建议否掉
不然会吃亏的
另外
var t1,t2:array[1..20001] of longint;
移到函数外面作为全局变量
这是栈溢出的根本原因
回LS:‘t1[mid + 1] := MaxLongint;
t2[y + 1] := MaxLongint;
你那种写法是不是basic里学来的
建议否掉
不然会吃亏的’
什么意思,怎么改?
测试结果1: 测试结果错误.错误结果为:3088
正确结果应为:1825
测试结果2: 测试结果错误.错误结果为:12320
正确结果应为:7400
测试结果3: 测试结果错误.错误结果为:45847
正确结果应为:22241
测试结果4: 测试结果错误.错误结果为:446982
正确结果应为:292646
测试结果5: 测试结果错误.错误结果为:1197536
正确结果应为:724368
测试结果6: 测试结果错误.错误结果为:5259567
正确结果应为:4795846
测试结果7: 测试结果错误.错误结果为:12035815
正确结果应为:9095711
测试结果8: 测试结果错误.错误结果为:45885368
正确结果应为:31164401
测试结果9: 测试结果错误.错误结果为:79206342
正确结果应为:57902100
测试结果10: 测试结果错误.错误结果为:130238607
正确结果应为:96196943
大牛们知道怎么解决吗?