Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E. Buy Low Sell High
阿新 • • 發佈:2017-10-02
amp base multiset ret pac multi 刪掉 股票 ems
題意:一些股票的價格,我們可以選擇買進賣出,但一天只有一個操作,問最大盈利
思路:對於當天,如果賣出的話&&之前有比他小的,我們肯定是找個最小那天的買進,但又不知道現在賣是不是最賺的,所以我們可以用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()); 17s.insert(x); 18 s.insert(x); 19 } 20 else s.insert(x); 21 } 22 cout<<sum<<endl; 23 return 0; 24 }
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E. Buy Low Sell High