题解 CF865D
这道题是今天讲课的一道原题,于是蒟蒻突发奇想决定写一篇题解,如有不适还请大佬们轻喷
我的思路是贪心
我们将每天的价格视为一个个"选项", 压入小根堆中,为了保证买入操作在卖出操作之前,我们从前往后扫描
然而,如果之后有
于是,当我们进行上述操作时,我们将
代码如下:
#include <bits/stdc++.h>
using namespace std;
const int maxN = 300001;
int n, pi;
long long ans = 0;
priority_queue< int, vector<int>, greater<int> > Q; \\小根堆
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> pi;
if (!Q.empty() && (Q.top() < pi)) {
ans += (pi - Q.top());
Q.pop();
Q.push(pi);
}
Q.push(pi);
}
cout << ans << endl;
return 0;
}
同时感谢洛谷,同机房的大佬,以及另一篇题解的作者