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 }

 

posted on 2017-10-02 15:37  hhhhx  阅读(101)  评论(0编辑  收藏  举报

导航