b419334269 2013-11-25 21:14:57
点我顶贴
收藏
删除
var i,j,n,s,t,x1,x2:longint;
a:array[1..10000] of longint;
procedure bulid(k,n:longint);
var i,j,t:longint;
begin
k:=k*2;
if k<=n then
begin
i:=k div 2; j:=k+1;
if (j<=n) and (a[j]<a[k]) then k:=k+1;
if a[i]>a[k] then
begin
t:=a[i]; a[i]:=a[k]; a[k]:=t;
end;
bulid(k,n);
end;
end;
begin
readln(n); s:=0;
for i:=1 to n do read(a[i]);
for i:=n div 2 downto 1 do bulid(i,n);
for i:=1 to n-1 do
begin
x1:=0; x2:=0;
x1:=a[1];
t:=a[1]; a[1]:=a[n+1-i]; a[n+1-i]:=t;
bulid(1,n-i);
x2:=a[1];
t:=a[1]; a[1]:=a[n-i]; a[n-i]:=t;
bulid(1,n-1-i);
s:=s+x1+x2;
a[n-i]:=x1+x2;
t:=a[1]; a[1]:=a[n-i]; a[n-i]:=t;
bulid(1,n-i);
end;
writeln(s);
end.