思路详见之前的贪心专题,用优先队列来代替之前的插入排序,效率为O(nlogn)
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int MAXN=+;
int l[MAXN]; int main()
{
int n;
long long ans=;
priority_queue<int,vector<int>,greater<int> > pque;//C++总是把两个连续的>看作右移位运算符,因此会导致错误,要加空格
scanf("%d",&n);
for (int i=;i<n;i++)
{
scanf("%d",&l[i]);
pque.push(l[i]);
}
while (pque.size()>)
{
int a=pque.top();pque.pop();
int b=pque.top();pque.pop();
ans+=a+b;
pque.push(a+b);
}
cout<<ans<<endl;
return ;
}