卧薪尝胆,厚积薄发。
Buy Low Sell High
Date: Thu Sep 20 21:31:21 CST 2018
In Category:
NoCategory
Description:
给出
$n$
天的股票价格,每天可以买进一只股或者卖出一只股,问最大收益。
$1\le n \le 3\times 10^5$
Solution:
每次把负的当天价格放进堆里,代表如果在这一天买会损失
$-v[i]$
元,如果
$v[i]+$
堆顶
$>0$
,说明能构成一个赚钱的交易,
$ans|=v[i]+q.top()$
,然后再把一个
$-v[i]$
元放回堆里,因为
$b-a+c-b=c-a$
,所以相当于再买一个使得相当于没有进行这次操作。
Code:
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<queue>
#include<cstring>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
priority_queue<int> q;
int x;
long long ans = 0;
for(int i = 1;i <= n;++i)
{
scanf("%d",&x);
q.push(-x);
if(!q.empty() && x + q.top() > 0)
{
ans += x + q.top();q.pop();
q.push(-x);
}
}
cout << ans << endl;
return 0;
}
In tag:
算法-贪心
Copyright © 2020
wjh15101051
ღゝ◡╹)ノ♡