题意:
商人在城市之间进行低买高卖来赚取差价(只能从前往后)
分析:
因为要赚取的利润最大,所以刚开始不买入,直接卖出,但是优先队列里面存上两个一样的值,方便后面进行。
假设当前值是x,优先队列存两个-x,对应1表示买入,2表示卖出(其实是抵消前面产生的影响)。因为a买入b卖出,b买入c卖出就相当与a买入c卖出,这样才能取得最优解嘛。2代表的x一方面其实就相当于是抵消产生的影响。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
priority_queue<pair<ll,ll> > q;
ll ans=0,num=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
ll x;
scanf("%lld",&x);
q.push(make_pair(-x,1));
q.push(make_pair(-x,2));
ans+=x+q.top().first;
if(q.top().second==1) num+=2;
q.pop();
}
printf("%lld %lld\n",ans,num);
}
return 0;
}