CF865D Buy Low Sell High
CF865D Buy Low Sell High
我发现自己是真的学不会贪心……太玄学了。
这是一道反悔贪心的题目,比较简单的那种。
题意
你是一棵韭菜,喜欢炒股,每天可以买入一股或卖出一股,且最后一天之后你持有的股票数目应该为
思路
首先一个很显然的策略就是,我们从前往后扫,对于每一个数,找到它之前最小的那个数,如果可以获利,就增加答案。但这样有一个显然的问题,就是如果之后有价格更高的天数,那之前的最小价格就“浪费”了,我们现在就是要对这个浪费进行一个反悔。
我们发现,在第
代码:
#include<bits/stdc++.h> #define ll long long using namespace std; const int N = 3e5+10; inline int read(){ int x = 0; char ch = getchar(); while(ch<'0' || ch>'9') ch = getchar(); while(ch>='0' && ch<='9') x = x*10+ch-48, ch = getchar(); return x; } int n; ll ans; priority_queue<int, vector<int>, greater<int> > q; int main(){ n = read(); for(int i = 1; i<=n; ++i){ int tmp = read();q.push(tmp); if(q.size() && tmp>q.top()) ans+=tmp-q.top(), q.pop(), q.push(tmp); } printf("%lld\n", ans); return 0; }