题目链接:Problem - 6438
题面:
题意:你按顺序去n个城市,每个城市商品买入和卖出的价格一样,你可以用一天时间买入或者卖出,问最多可以获取多少钱,已经最少的天数
思路:在每个位置处贪心寻找之前的可以购买的物品中价格最低的,用map维护一下已经卖出过的价格,当现在买入的价格之前被卖出过,就可以减少购买次数
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define ll long long
map<int, int> mp;
int main(){
ios::sync_with_stdio(false);
int t;
cin >> t;
while(t--){
mp.clear();
int n;
cin >> n;
priority_queue<int, vector<int>, greater<int>> q;
ll sum = 0;
int num = 0;
for(int i = 0; i < n; i++){
int x;
cin >> x;
if(!q.empty() && (x > q.top())){
if(mp[q.top()] == 0){
num += 2;
}else{
mp[q.top()]--;
}
mp[x]++;
sum += x - q.top();
q.pop();
q.push(x);
}
q.push(x);
}
cout << sum << " " << num << endl;
}
return 0;
}