[ABC250G] Stonks Solution

更好的阅读体验戳此进入

题面

给定序列 Pn 表示 n 天里的股价,每天可以买入或卖出一股,本金无限,求最多能多少钱。

Solution

明显反悔贪心。

不失一般性,令 a<b<c,则若某天存在如下决策,即买 ab,那么赚的钱为 ba,而显然对于 a 来说,若买 ac,那么贡献为 ca>ba,差为 cb,则不难想到当买 ab 的时候再将 b 插入,此时如果存在 c 取了插入的 b,其实际意义即为撤销买 ab 并改为买 ac,但此时 b 天就无操作了,所以我们此时需要再额外插入一个 b,表示后面若需要可以执行一次买 bd 的操作。不难想到可以用小根堆维护,假设堆顶元素为 top,当前元素为 x,若 xtop>0 那么贡献为 xtop,反之将 x 压入小根堆即可。

双倍经验 CF865D Buy Low Sell High

Code

UPD

update-2022_12_20 初稿