abc250G 股票交易

给出未来n天的股票交易价格p[i],每天可以选择买入1个单位、卖出1个单位、或者不交易。最初手里没有股票和无限资金,问n天结束后的最大获利。注意,n天结束后手里的股票价值为0。
1<=n<=2e5; 1<=p[i]<=1e9

反悔贪心,如果当天有利可图就卖出,同时买入当天股票,后面再涨就再卖出,相当于中间那天没有交易。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=b;i>=a;i--)

const int N = 200005;
int n, p[N], ans;
void solve() {
    cin >> n;
    rep(i,1,n) cin >> p[i];
    priority_queue<int,vector<int>,greater<int>> q;
    rep(i,1,n) {
        if (!q.empty() && q.top() < p[i]) {
            ans += p[i] - q.top();
            q.pop();
            q.push(p[i]);
        }
        q.push(p[i]);
    }
    cout << ans << "\n";
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}
posted @ 2024-03-18 23:09  chenfy27  阅读(2)  评论(0编辑  收藏  举报