题目链接:https://cn.vjudge.net/problem/1103381/origin
题目大意:知道股票每一天的价格,当我们手中没有股票的时候不可以出售,求最后所能获得的最大价值
假如当前输入为 x ,且堆空或者堆顶元素大于 x 时,将 x 插入堆中;
否则删除堆顶元素,将 x 在堆中插入两遍
一开始不明白为什么插入两遍,题解中的解释都太啰嗦了,直接看样例“10 5 4 7 9 12 6 2 10
会得到
−4+7−5+9−7+12−2+10=20
#include<iostream>
#include<queue>
using namespace std;
typedef long long ll;
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
int n,i;
long long x,ans=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>x;
if(!q.empty()&&x>q.top())
{
ans+=(x-q.top());
q.pop();
q.push(x);
q.push(x);
}
else
q.push(x);
}
cout<<ans<<endl;
return 0;
}