program p1066; var a:array[0..10002]of longint; n,i,j,k,ans,tot:longint; procedure swap(var x,y:longint); var t:longint; begin t:=x;x:=y;y:=t; end; procedure siftup(x:longint); var j:longint; begin inc(tot); if tot=1 then a[tot]:=x else begin a[tot]:=x; j:=tot; while (j>1)and(a[j]<a[j div 2]) do begin swap(a[j],a[j div 2]); j:=j div 2; end; end; end; procedure siftdown(x:longint); var j,k:longint; begin j:=1; k:=2*j; while (k<=tot) do begin if (a[k]>a[k+1])and(k+1<=tot) then inc(k); if x>a[k] then begin swap(a[j],a[k]); j:=k; k:=2*j; end else exit; end; end; begin readln(n); fillchar(a,sizeof(a),0); for i:=1 to n do begin read(j); siftup(j); end; ans:=0; for i:=1 to n-1 do begin inc(ans,a[1]); swap(a[1],a[tot]); dec(tot); siftdown(a[1]); inc(ans,a[1]); a[1]:=a[1]+a[tot+1]; siftdown(a[1]); end; writeln(ans); end. /************************************************************** Problem: 2249 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/