利用数据结构排序的priority_queue

考虑以下几个问题:

将一个序列排序

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

每次取出最前面的两个数

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

相加,再加入序列

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

保持序列的有序性

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

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

某神仙:卒(

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

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

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

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

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

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

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

你可能感兴趣的:(利用数据结构排序的priority_queue)