一,大根堆与小根堆
大:priority_queue<int,vector<int>,greater<int> > p;
小:priority_queue<int > q;
大根堆的优先级事越大的数在上(树)
相反则是小根堆
如何使用???
#include <bits/stdc++.h>
using namespace std;
priority_queue<int > q;
int main() {
q.top();//取堆顶
q.pop();//取出对顶
q.empty();//判断是否为空
q.size();//堆的长度
q.push(x);//将x入堆
sort(q,q+n,cmp);//排序(或则用重载运算符)
return 0;
}
二.重载运算符+拟定函数
node(int _v=0,int _x=0,int _y=0){
x=_x,y=_y,v=_v;
}
bool operator<(const node &q)const{
return v>q.v;
}
拟定函数可以任意为结构体复值
这个题是一个后悔贪心,把第一天的数据加入小根堆,遍历一下数组,如果队头比当前天数的大,那么用 当前天数的价钱-对头的价钱=利益,因此可以建立一个小根堆把钱数少的股票买入,再从最大的钱数卖掉,但是这样做有一个缺点,例如1 5 9这个样例在我的一开始的思路里是不成立的,这样下来原本利润为8,但我们利润为4。
AC代码: