利用数据结构排序的priority_queue

考虑以下几个问题:

将一个序列排序

某神仙: (mathtt{sort}) !!!

每次取出最前面的两个数

某神仙: (a_i)(a_{i+1}) 啊!!

相加,再加入序列

某神仙:...... for 循环乱搞啊!

保持序列的有序性

某神仙:(声音逐渐变弱)再搞一次 (mathtt{sort}) 呗。

(n≤10000),请注意程序的时间复杂度

某神仙:卒(

于是,这就需要用到 STL queue 中的 (mathtt{priority\_queue})了!!!

唯一需要注意的地方是 (mathtt{priority\_queue}) 的定义,即

小根堆:priority_queue<int,vector<int>,greater<int> > q;
大根堆:priority_queue<int,vector<int>,less<int> > q;

其中第一个 int 表示优先队列存放的数据类型, vector<int> 表示存放的方式是数组, greater<int> 表示小根堆(从小到大),less<int> 表示大根堆(从大到小)。注意最后的两个 >> 要写成 > > ,否则可能会被编译器误认为位运算右移符号。

然后就是很基础的操作了:

q.push(x) //在优先队列中插入x O(logN)
q.top() //取出队首的元素 O(1)
q.pop() //令队首出队 O(logN)
q.empty() //判断队列是否为空
q.size() //队列中元素的数量

学会的话来做一道模板题吧(ง •_•)ง题解在这

原文地址:https://www.cnblogs.com/BlueInRed/p/12309462.html