#include <iostream> #include <algorithm> using namespace std; const int N(30009); int w[N]={0}; void adjust(int i,int b) { int j=i*2; while(j<=b) { if(j<b&&w[j]>w[j+1]) j++; if(w[i]>w[j]) { swap(w[i],w[j]); i=j; j*=2; } else break; } } int main() { int n,ans(0); cin>>n; for(int i=1;i<=n;i++) cin>>w[i]; for(int i=n/2;i>=1;i--) adjust(i,n); for(int i=n;i>1;i--) { adjust(1,i); swap(w[1],w[i]); adjust(1,i-1); w[1]+=w[i]; ans+=w[1]; } cout<<ans<<endl; return 0; } /************************************************************** Problem: 2249 User: admin Language: C++ Result: Accepted Time:67 ms Memory:2192 kb ****************************************************************/