Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E. Buy Low Sell High
题意:一些股票的价格,我们可以选择买进卖出,但一天只有一个操作,问最大盈利
思路:对于当天,如果卖出的话&&之前有比他小的,我们肯定是找个最小那天的买进,但又不知道现在卖是不是最赚的,所以我们可以用multiset,这个和set类似,但可以存储相同的数字,并排序
所以我们删掉那个最小的,添加2个当前的,一个当中是中转,一个当作是数字,
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 multiset<int > s; 5 multiset<int >::iterator it; 6 7 int main(){ 8 int n; 9 cin>>n; 10 ll sum=0; 11 for(int i=1;i<=n;i++){ 12 int x; 13 scanf("%d",&x); 14 if(!s.empty()&&x>*s.begin()){ 15 sum+=(x-*s.begin())*1LL; 16 s.erase(s.begin()); 17 s.insert(x); 18 s.insert(x); 19 } 20 else s.insert(x); 21 } 22 cout<<sum<<endl; 23 return 0; 24 }