c++优先队列用法

来源:互联网 发布:他知而自不知的我属于 编辑:程序博客网 时间:2024/06/05 01:51

头文件
< queue>
<functional>

priority_queue<int, vector<int>, greater<int> > q; //从小到大的优先级队列,可将greater改为less,即为从大到小
q.push() 插入一个元素
q.pop() 弹出队头元素
q.top() 队头元素
q.size() 队列长度

题意,一个队列每次合并最小的两个数,这两个数的和再次插入队列,重复直到队列只有一个数。

#include<iostream>#include<queue>#include<functional>using namespace std;int n;int s[100000];int nn;int  main(){    cin >> n;    nn = n;    int i=0;    int sum = 0;    int a;    int b;    priority_queue<int, vector<int>, greater<int> > q;    while (n--)    {        cin >> i;        q.push(i);    }    if (nn == 1)    {        cout << q.top() << endl;        return 0;    }    while (q.size()>1)    {        a = q.top();        q.pop();        b= q.top();        q.pop();            sum += (a+b);            a += b;            q.push(a);    }    cout << sum << endl;    return 0;}
0 0
原创粉丝点击