对大根堆和小根堆定义的一些理解
priority_queue<,,>的三个参数分别指的是数据类型、底层容器、比较器
默认是大根堆,只需要传入int数据类型即可,容器和比较方式分别为vector[HTML_REMOVED]和less[HTML_REMOVED],是按照从大到小来排序
所以在定义大根堆时可以直接写成priority_queue[HTML_REMOVED] heap;从而省略容器类型和比较器
但是在定义小根堆时只能将三个参数全部加上,虽然中间的容器类型也是默认的vector
但是只省略第二个而加上第三个会导致函数引用出错
include <iostream>
include <cstring>
include <algorithm>
include <queue>
using namespace std;
int main()
{
int n;
cin >> n;
priority_queue<int, vector<int>, greater<int>> heap;
while(n --){
int x;
cin >> x;
heap.push(x);
}
int ans;
while(heap.size() > 1){
int a = heap.top(); heap.pop();
int b = heap.top(); heap.pop();
ans += a + b;
heap.push(a + b);
}
cout << ans;
return 0;
}