https://vjudge.net/problem/POJ-3253
贪心复杂度n^2, 单调队列nlogn
每次取出最小的两个点, 和再入队即可
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
using namespace std;
#define ms(x, n) memset(x,n,sizeof(x));
typedef long long LL;
const LL maxn = 20010;
priority_queue<int, vector<int>, greater<int> > q;
int main()
{
int n, p;
cin >> n;
for(int i = 1; i<= n; i++)
cin >> p, q.push(p);
LL ans = 0;
while(q.size()>1){
int p1 = q.top();
q.pop();
int p2 = q.top();
q.pop();
ans += (p1+p2);
q.push(p1+p2);
}
cout << ans << endl;
return 0;
}