zoukankan      html  css  js  c++  java
  • 利用数据结构排序的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() //队列中元素的数量
    

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

  • 相关阅读:
    第七周学习总结
    深入理解计算机系统第二章家庭作业
    第六周学习总结
    第五周学习总结
    第四周学习总结
    第三周学习总结
    第二周学习总结
    caffe的特殊层
    Eltwise层解析
    slice层解析
  • 原文地址:https://www.cnblogs.com/BlueInRed/p/12309462.html
Copyright © 2011-2022 走看看