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;
}