#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
long long ans = 0;
int t, n, a[100010];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
scanf("%d", &a[i]);
make_heap(a + 1, a + n + 1, greater<int>());
int t, cnt = n;
while(1) {
t = a[1];
pop_heap(a + 1, a + cnt + 1, greater<int>());
t += a[1]; cnt --;
pop_heap(a + 1, a + cnt + 1, greater<int>());
ans += t, a[cnt] = t;
push_heap(a + 1, a + cnt + 1, greater<int>());
if(cnt == 1) break;
}
printf("%lld", ans);
return 0;
}
【NOIP模板】 堆-stl
最新推荐文章于 2021-07-13 10:43:09 发布