习新果 2013-02-02 01:20:00
点我顶贴
收藏
删除
var a:array[0..20000] of longint;
i,j,n,ed,sum,t:longint;
procedure heapdown(i,n:longint);
var
j,t:longint;
begin
j:=i*2;
while j<=n do
begin
if (j<n) and (a[j+1]<a[j]) then inc(j);
if a[i]>a[j] then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
i:=j;
j:=i*2;
end
else j:=maxlongint;
end;
end;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=n div 2 downto 1 do heapdown(i,n);
sum:=0;
while n<>1 do
begin
t:=a[n];a[n]:=a[1];a[1]:=t;
heapdown(1,n-1);
dec(n);
t:=a[n];a[n]:=a[1];a[1]:=t;
heapdown(1,n-1);
a[n]:=a[n]+a[n+1];
sum:=sum+a[n];
end;
writeln(sum);
end.