#include <iostream> #include <stdio.h> #include <algorithm> #include <stdlib.h> #define INPUT using namespace std; const int MAXSIZE = 50010; bool comp1(int a,int b) { return a>b; } int main() { #ifdef INPUT freopen("b:\\acm\\poj3253\\input.txt","r",stdin); #endif long n; while(scanf("%d",&n) != EOF ) { long v[MAXSIZE] = {0}; unsigned long long res = 0; // unsigned long long sum = 0; long j = 0; for(int i = 0 ; i < n; i++) { scanf("%ld",&v[i]); } //make_heap:[first,last),so v[n] make_heap(&v[0],&v[n],comp1); for(;n>1;n--) { //pop_heap assumes that [0..n) is already a heap pop_heap(&v[0],&v[n],comp1); //v[n-1] is now v[0],the heap is [0..n-1) pop_heap(&v[0],&v[n-1],comp1); //v[n-2] is now v[0],the heap is [0..n-2) v[n-2] = v[n-2] + v[n-1]; //push_heap assumes [first,last-1) is a heap; //it makes [first,last) a heap(push the last - 1) //so,it pushes v[n-2] push_heap(&v[0],&v[n-1],comp1); res = res + v[n-2]; } cout << res << endl; /// } return 0; }