2018CCPC网络赛A(优先队列,思维)
Posted ldudxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018CCPC网络赛A(优先队列,思维)相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h>
using namespace std;
priority_queue<pair<int,int>>q;
int main()
{
int t;
int n;
scanf("%d",&t);
while(t--)
{
while(!q.empty())
q.pop();
scanf("%d",&n);
long long sum=0;
int times=0;
long long tmp=0;
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
q.push({-x,1});//买入
q.push({-x,2});//卖出
tmp=x+q.top().first;//如果前面没有比它更小的,相当于放进去一个标记为1的
//如果有比它更小的,相当于执行买卖
if(q.top().second==1)//除了第一次进队列的价值以外都是标记为2的在前,当它第一次被交易时,
//不记次数,相当于之前的商品升值,如果计数则会超出答案
times+=2;//交易两次
sum+=tmp;
q.pop();
}
printf("%lld %d
",sum,times);
}
return 0;
}
//曾经尝试不使用pair放入队列,或者多重集升序排序,另开vis数组来判断是否增加times,结果RE,反思+自闭
以上是关于2018CCPC网络赛A(优先队列,思维)的主要内容,如果未能解决你的问题,请参考以下文章
ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)
ACM-ICPC2018北京网络赛 Saving Tang Monk II(bfs+优先队列)