1. 程式人生 > >Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E. Buy Low Sell High

Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E. Buy Low Sell High

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()); 17
s.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