传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6438

又是维护一个堆,然后搞搞维护的题,赛场上队友一蛤就A掉了,我还是菜

我们维护一个小根堆,维护3个信息,那天的卖价,是否已经跟别人交换过,那天

我们考虑一个新的物品跟小根堆的堆顶比较,如果新物品比堆顶还小,说明交易亏本,直接丢入堆中,否则就交易,如果堆顶的元素是已经跟之前交易过的,那么就相当于当前物品和之前那个交易,然后堆顶就变成没有交易了,继续插入堆中,交换次数不变,如果堆顶是没有交易过的,那么就交易,交易次数+2.我们希望交换次数尽可能的小,那么价值相同是,已经交换过得就有限辣

#include<cstdio>
#include<algorithm>
#include<queue>
#define maxl 100010using namespace std;int n;
int a[maxl],frm[maxl];
long long ans,swp;
typedef pair<int,bool> p;
typedef pair<p,int> node;
priority_queue<node,vector<node>,greater<node> > q;
bool in[maxl];inline void prework()
{ans=0;swp=0;scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]),in[i]=true;while(!q.empty())q.pop();
}inline void mainwork()
{p d;node dd;for(int i=1;i<=n;i++){if(q.empty())q.push(make_pair(make_pair(a[i],true),i));else{dd=q.top();d=dd.first;if(d.first>=a[i])q.push(make_pair(make_pair(a[i],true),i));else{q.pop();if(!in[dd.second]){ans+=a[i]-d.first;in[i]=false;in[dd.second]=true;frm[i]=frm[dd.second];frm[dd.second]=0;q.push(make_pair(make_pair(a[dd.second],true),dd.second));q.push(make_pair(make_pair(a[i],false),i));}else{ans+=a[i]-d.first;swp+=2;in[i]=false;in[dd.second]=false;frm[i]=dd.second;q.push(make_pair(make_pair(a[i],false),i));}}    }}
}inline void print()
{printf("%lld %lld\n",ans,swp);
}int main()
{int t;scanf("%d",&t);for(int i=1;i<=t;i++){prework();mainwork();print();}return 0;
}

HDU 6438Buy and Resell相关推荐

  1. 怎么提取pdf中的表格数据_如何从pdf第1部分中提取表格数据

    怎么提取pdf中的表格数据 In this article, we talk about the challenges and principles of extracting tabular dat ...

  2. HDU 6438 Buy and Resell【贪心】

    http://acm.hdu.edu.cn/showproblem.php?pid=6438 Problem Description The Power Cube is used as a stash ...

  3. Buy and Resell HDU - 6438(补)更新贪心

    The Power Cube is used as a stash of Exotic Power. There are nn cities numbered 1,2,-,n1,2,-,n where ...

  4. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  5. Buy and Resell HDU - 6438 贪心

    题目描述: 有一个物品,给你这个物品n天的价格,你可以在在第i天买进或卖出或者什么都不做,如何获得最大利益,假设本金是无限大的. 分析: 我们建立一个最小堆,即优先队列,每天,将队列的最小值和当前的值 ...

  6. HDU - 6438 Buy and Resell(思维+ 贪心)

    题目链接 题意 t组输入,每组n个城市,给出每个城市的货物的价格,在每个城市可以进行三个操作:购买货物,卖出货物,不做操作,问从城市1到城市n(不能返回)最多能获得多少利润,且操作数最少(买和卖分别算 ...

  7. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  8. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  9. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

最新文章

  1. java jar 是什么文件_jar文件怎么打开?jar文件是什么?
  2. 2、Reactive Extensions for .NET(译)
  3. 安装 VMware Tools 实现窗口 自适应 及 主机与虚拟机之间复制粘贴
  4. 轻量级的日期时间控件Pikaday
  5. 点击率预估算法:FM与FFM
  6. 【HDU - 3172】Virtual Friends(带权并查集--权为集合元素个数)
  7. 25岁“天才少年”曹原再发一篇Nature!1个月时间内的第二篇!
  8. javaScript输出指定的时间格式
  9. [转]Linux线程同步之条件变量
  10. C#实现实时监控文件目录下的变化
  11. 汇编语言-学习笔记(一)
  12. Django 学习第九天——请求与响应
  13. java batik_java – 如何在Batik SVG库中使用自定义字体?
  14. 计算机wifi共享怎么设置,笔记本电脑设置wifi热点共享教程
  15. 破解justinmind方法,简单有效
  16. 计算机网络实验(三个部分--验证性、Wireshark、CPT)
  17. shell插入多行文本
  18. NATS中文开发文档:连接
  19. pycharm光标变成黑框,恢复成竖线
  20. Java基础知识提炼与总结

热门文章

  1. 【模拟经营】《模拟城市4豪华版》免安装中文版
  2. O2优化后,程序freez了(变量的读取过程被优化,使用volatile可解决)
  3. 计算机等级考试陕西省考点名单及报考指南
  4. 弘辽科技:抖音评价分析看板数据如何解读?
  5. idea设置静态壁纸步骤
  6. 火水未濟 (易經大意 韓長庚)
  7. html+css唯品会的登录页面
  8. VMware14虚拟机安装苹果系统
  9. matlab点集配准,matlab练习程序(对应点集配准的四元数法)
  10. Unity中的半透明阴影