問題の意味
N日1つのにおける二つの動作毎日がなければならない:、1株または販売を1株を購入。I-日[i]は、在庫がない開始の株価は、手が少なくとも一つのシェアを持っていなければならないときに株式を売却、最終最大の利益でどのくらい尋ねます。それは否定することができます。
ソリューション
貪欲:まず、偶数日の戦略、購入する奇数日、販売を検討し、それが良くなるように、そして、常に販売する前に、より費用対効果の高い、プットを販売する日の奇数の場合は、小さなヒープルートを維持することの価値を販売を検討し、戦略を調整その日に購入するための最小価格。(操作の日に別の操作を選択するために戻って行くことです)。
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
#define int long long
inline int read(){
char c=getchar();int t=0;
while(!isdigit(c)){c=getchar();if(c==EOF)break;}
while(isdigit(c)){t=(t<<3ll)+(t<<1ll)+1ll*(c^48);c=getchar();if(c==EOF)break;}
return t;
}
int n,a[maxn];
priority_queue<int,vector<int>,greater<int> > q;
signed main(){
//freopen("2.in","r",stdin);
//freopen("2.out","w",stdout);
//scanf("%lld",&n);
n=read();
for(int i=1;i<=n;i++){
//scanf("%lld",&a[i]);
a[i]=read();
}
int alfa=-a[1];
for(int i=2;i<=n;i++){
int x=a[i];
if(i%2==0){
alfa+=x;q.push(x);
}
else{
if(q.empty())continue;
int y=q.top();
if(x>y){
alfa+=x-y*2;
q.pop();q.push(x);
}
else{
alfa-=x;
}
}
}
printf("%lld\n",alfa);
return 0;
}
Tucao
いくつかのOJで、状況TLEの迅速な読み取りに問題が非常に速く、シュトゥットガルトを宣告リードレスへの会員データを、表示されているので、scanf関数を置き換えることができます。