当前位置: 首页 > 编程日记 > 正文

bzoj 1691: [Usaco2007 Dec]挑剔的美食家

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 621  Solved: 280
[Submit][Status][Discuss]

Description

与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了。现在,Farmer John不得不去牧草专供商那里购买大量美味多汁的牧草,来满足他那N(1 <= N <= 100,000)头挑剔的奶牛。 所有奶牛都对FJ提出了她对牧草的要求:第i头奶牛要求她的食物每份的价钱不低于A_i(1 <= A_i <= 1,000,000,000),并且鲜嫩程度不能低于B_i(1 <= B_i <= 1,000,000,000)。商店里供应M(1 <= M <= 100,000)种不同的牧草,第i 种牧草的定价为C_i(1 <= C_i <= 1,000,000,000),鲜嫩程度为D_i (1 <= D_i <= 1,000,000,000)。 为了显示她们的与众不同,每头奶牛都要求她的食物是独一无二的,也就是说,没有哪两头奶牛会选择同一种食物。 Farmer John想知道,为了让所有奶牛满意,他最少得在购买食物上花多少钱。

Input

* 第1行: 2个用空格隔开的整数:N 和 M

* 第2..N+1行: 第i+1行包含2个用空格隔开的整数:A_i、B_i * 第N+2..N+M+1行: 第j+N+1行包含2个用空格隔开的整数:C_i、D_i

Output

* 第1行: 输出1个整数,表示使所有奶牛满意的最小花费。如果无论如何都无法 满足所有奶牛的需求,输出-1

Sample Input

4 7
1 1
2 3
1 4
4 2
3 2
2 1
4 3
5 2
5 4
2 6
4 4

Sample Output

12

输出说明:

给奶牛1吃价钱为2的2号牧草,奶牛2吃价钱为4的3号牧草,奶牛3分到价钱
为2的6号牧草,奶牛4选择价钱为4的7号牧草,这种分配方案的总花费是12,为
所有方案中花费最少的。

Source Gold

题解

  让牛和草按照鲜嫩度排序,然后对于第i头奶牛,把所有新鲜度大于它要求的价值塞到一个平衡树里,每次ANS加上当前平衡树中它要求的价值的后继,但一定要先判断一下有没有和它要求的价值正好相等的草。

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstdlib>
  4 #include<cstring>
  5 #include<cmath>
  6 #include<algorithm>
  7 #include<vector>
  8 #include<queue>
  9 using namespace std;
 10 typedef long long LL;
 11 const LL maxn=200010;
 12 LL root,tot,N,M;
 13 LL ANS;
 14 LL key[maxn],siz[maxn],lc[maxn],rc[maxn];
 15 struct COW{
 16     LL a,b;
 17 }cow[maxn];
 18 struct G{
 19     LL a,b;
 20 }gra[maxn];
 21 bool cmp(const COW&w,const COW &e){
 22     if(w.b>e.b) return 1;
 23     return 0;
 24 }
 25 bool cmp2(const G&w,const G &e){
 26     if(w.b>e.b) return 1;
 27     return 0;
 28 }
 29 void r_rotate(LL &rt){
 30     LL k=lc[rt];
 31     lc[rt]=rc[k];
 32     rc[k]=rt;
 33     siz[k]=siz[rt];
 34     siz[rt]=siz[lc[rt]]+siz[rc[rt]]+1;
 35     rt=k;
 36 }  
 37 void l_rotate(LL &rt){
 38     LL k=rc[rt];
 39     rc[rt]=lc[k];
 40     lc[k]=rt;
 41     siz[k]=siz[rt];
 42     siz[rt]=siz[lc[rt]]+siz[rc[rt]]+1;
 43     rt=k;
 44 }
 45 void MAINTAIN(LL &rt,bool flag){
 46     if(flag==false){
 47         if(siz[lc[lc[rt]]]>siz[rc[rt]]) r_rotate(rt);
 48         else if(siz[rc[lc[rt]]]>siz[rc[rt]]){
 49             l_rotate(lc[rt]);
 50             r_rotate(rt);
 51         }
 52         else return;
 53     }
 54     else{
 55         if(siz[rc[rc[rt]]]>siz[lc[rt]]) l_rotate(rt);
 56         else if(siz[lc[rc[rt]]]>siz[lc[rt]]){
 57             r_rotate(rc[rt]);
 58             l_rotate(rt);
 59         }
 60         else return;
 61     }
 62     MAINTAIN(lc[rt],0); MAINTAIN(rc[rt],1); 
 63     MAINTAIN(rt,1); MAINTAIN(rt,0);
 64 }
 65 void insert(LL &rt,LL v){
 66     if(rt==0){ 
 67         rt=++tot; 
 68         key[rt]=v;
 69         lc[rt]=rc[rt]=0; siz[rt]=1;
 70         return ;
 71     }
 72     siz[rt]++;
 73     if(v<=key[rt]) insert(lc[rt],v);
 74     else insert(rc[rt],v);
 75     MAINTAIN(rt,v>key[rt]);
 76 }
 77 LL Delete(LL &rt,LL v){
 78     LL ans;
 79     siz[rt]--;
 80     if(v==key[rt]||(v<key[rt]&&lc[rt]==0)||(v>key[rt]&&rc[rt]==0)){
 81         ans=key[rt];
 82         if(lc[rt]==0||rc[rt]==0) rt=lc[rt]+rc[rt];
 83         else key[rt]=Delete(lc[rt],key[rt]+1);
 84         return ans;
 85     }
 86     if(v<key[rt]) ans=Delete(lc[rt],v);
 87     else ans=Delete(rc[rt],v);
 88     return ans;
 89 }
 90 LL succ(LL &rt,LL v){//返回比v大的最小的数 
 91     if(rt==0) return v;
 92     if(v>=key[rt]) return succ(rc[rt],v);
 93     else{
 94         LL ans=succ(lc[rt],v);
 95         if(ans==v) return key[rt];
 96         return ans;
 97     }
 98 }
 99 bool find(LL &rt,LL v){//查找是否有 key值为 v的节点 
100     if(rt==0) return false;
101     else if(v==key[rt]) return true;
102     else if(v<key[rt]) return find(lc[rt],v);
103     else if(v>key[rt]) return find(rc[rt],v);
104 }
105 
106 int main(){
107     scanf("%lld%lld",&N,&M);
108     if(M<N){
109         printf("-1");
110         return 0;
111     }
112     for(LL i=1;i<=N;i++) scanf("%lld%lld",&cow[i].a,&cow[i].b);
113     for(LL i=1;i<=M;i++) scanf("%lld%lld",&gra[i].a,&gra[i].b);
114     sort(cow+1,cow+N+1,cmp); sort(gra+1,gra+M+1,cmp2);
115     for(LL i=1,j=1;i<=N;i++){
116         while(gra[j].b>=cow[i].b&&j<=M)
117             insert(root,gra[j++].a);
118         if(siz[root]==0){printf("-1"); return 0;}
119         if(find(root,cow[i].a)==true){
120             ANS+=cow[i].a;
121             Delete(root,cow[i].a);
122         }
123         else{
124             LL num=succ(root,cow[i].a);
125             ANS+=num; 
126             Delete(root,num);
127         }
128     }
129     printf("%lld",ANS);
130     return 0;
131 }

转载于:https://www.cnblogs.com/CXCXCXC/p/5096656.html

相关文章:

PHP内核中的哈希表结构

https://github.com/HonestQiao/tipi/commit/17ca680289e490763a6a402f79afa2a13802bb36 下载&#xff1a;https://github.com/HonestQiao/tipi/tree/master/book/sample/chapt03 原文地址&#xff1a;http://www.nowamagic.net/librarys/veda/detail/1344 PHP中使用最为频…

应聘苹果数据科学家,你需要知道些什么?

作者 | Jay Feng译者 | 孙薇&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;以下为译文&#xff1a;苹果公司是全球最大的技术公司之一&#xff0c;从事电子消费产品、计算机软件以及在线服务的设计、开发并销售工…

python 利用模板文件生成配置文件

2019独角兽企业重金招聘Python工程师标准>>> gen.py: __author__ fuhan from jinja2 import Template a{name:a} b{name:b} mode_dict { a:a, b:b } def gen_config(tplt_file, modea): with open(tplt_file, r) as r: tplt Template(r.read()) config mode_dic…

利用Apache的ab命令做Benchmark性能测试

测试系统性能&#xff0c;例如httpsqs # ab -k -c 10 -n 100000 "http://127.0.0.1:1218/?namexoyo&optput&dataabc ab是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能&#xff0c;主要是显示你安装的Apache每秒可…

MySQL 狠甩 Oracle 稳居 Top1,私有云最受重用,大数据人才匮乏! | 中国大数据应用年度报告...

整理 | 屠敏出品 | CSDN&#xff08;ID:CSDNnews&#xff09;科技长河&#xff0c;顺之者昌&#xff0c;错失者亡。在这个技术百态之中&#xff0c;中国专业的 IT 社区CSDN 创始人&董事长蒋涛曾多次在公开活动中表示&#xff0c;开发者是对技术变革最敏感的人群。这不仅源于…

MAC安装OpenXenManager管理Xenserver

官方文档&#xff1a;https://github.com/OpenXenManager/openxenmanager要求&#xff1a;Python 2.7pyGTK 2.16ConfigObjRavenGTK-VNC&#xff08;仅限Linux&#xff09;Debian / Ubuntu Linux软件包依赖项&#xff1a;python2.7 python-gtk2 glade python-gtk-vnc python-gla…

用Flutter + Dart快速构建一款绝美移动App

作者 | Wojciech Kuroczycki译者 | 弯月来源 | CSDN&#xff08;ID:CSDNnews&#xff09;如今&#xff0c;与前端或移动相关的新框架层出不穷。所有从事Web开发的人都应该熟悉各种目不暇接的新方法以及针对复杂问题的轻量级解决方案。我们不再因为没有现成的技术而烦恼&#xf…

自己写的单链表

link.c #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> #include "link.h"/**** 这是一个计算HASH值的算法**/ int time33(char* arKey,int arlength){int h 0;int i;for(i0;i<arlength;i){h h*3…

假装不知道有尽头(博弈论的诡计)

《笑林广记》中记载这样一则笑话。 有一个人去理发铺剃头&#xff0c;剃头匠给他剃得很草率。剃完后&#xff0c;这人却付给剃头匠双倍的钱&#xff0c;什么也没说就走了。一个多月后的一天&#xff0c;这人又来理发铺剃头。剃头匠还记得他上次多付了钱&#xff0c;觉得此人阔绰…

Java Script 第四节课 Java Script的隐式转换

<!DOCTYPE html><html><head><meta charset"utf-8"><title></title><script type"text/javascript">/*if(exp){exp为true的代码段;}else{exp为false的代码段;}*///其它类型转换成布尔类型假的有var a;//undefin…

深入理解malloc和free

1.为什么free是void*&#xff0c;那么它怎么知道要释放多少内存&#xff1f; 《UNIX环境高级编程》 《C语言编程常见问题解答》 《你必须知道的495个C语言问题》 《UNIX环境高级编程》 2.free源码 内存控制块结构定义 struct mem_control_block {int is_available;int si…

根据IP和MAC查端口

进入交换机的命令提示符.输入show ip arp 查出IP地址跟MAC 地址的对照表.再输入show mac-address-table,看一下这个MAC是从哪个端口学到的转载于:https://blog.51cto.com/124130/271033

“数学不好,干啥都不行!”骨灰级程序员:其实你们都是瞎努力!

之前很多程序员读者向我们反馈&#xff1a;1&#xff09;数据结构、编程语句&#xff0c;核心原理都是数学&#xff0c;不会数学搞编程好难&#xff0c;后来发现各种东西还要概率论&#xff0c;还要推收敛&#xff01;近似还要知道泰勒展开&#xff01;2&#xff09;做算法优化…

转:秒杀系统架构分析与实战

原文出处&#xff1a; 陶邦仁 欢迎分享原创到伯乐头条 0 系列目录 秒杀系统架构 秒杀系统架构分析与实战1 秒杀业务分析 正常电子商务流程 &#xff08;1&#xff09;查询商品&#xff1b;&#xff08;2&#xff09;创建订单&#xff1b;&#xff08;3&#xff09;扣减库存&a…

Visual Studio中的《C# 语言规范》

无意中的无意发现了个好东西——《C# 语言规范》&#xff0c;您不用到处下载&#xff0c;它就在您的Visual Studio安装目录中&#xff0c;例如&#xff1a;F:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\2052\CSharp Language Specification.doc 这是它的目…

超轻量级中文OCR,支持竖排文字识别、ncnn推理,总模型仅17M

整理 | AI科技大本营光学字符识别&#xff08;OCR&#xff09;技术已经得到了广泛应用。比如发票上用来识别关键字样&#xff0c;搜题App用来识别书本上的试题。近期&#xff0c;这个叫做chineseocr_lite的OCR项目开源了&#xff0c;这是一个超轻量级中文ocr&#xff0c;支持竖…

Redis队列的应用

Redis用双链表list实现队列的 LPUSH key value [value ...] 将一个或多个值 value 插入到列表 key 的表头 如果有多个 value 值&#xff0c;那么各个 value 值按从左到右的顺序依次插入到表头&#xff1a; 比如说&#xff0c;对空列表 mylist 执行命令 LPUSH mylist a b c &…

Python fabric实现远程操作和部署

fabrictitle是开发&#xff0c;但是同时要干开发测试还有运维的活 (o(╯□╰)o)近期接手越来越多的东西&#xff0c;发布和运维的工作相当机械&#xff0c;加上频率还蛮高&#xff0c;导致时间浪费还是优点多。修复bug什么的&#xff0c;测试&#xff0c;提交版本库(2分钟)&…

自己写的哈希表以及解决哈希冲突

哈希表就是键值key-value对&#xff0c;使用hash函数让key产生哈希值&#xff0c;当不同的key产生相同的哈希值时就是哈希冲突了&#xff0c;产生哈希冲突可以使用拉链法。 hash.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include &…

Python与MySQL数据库的交互实战

作者 | Huang supreme编辑 | 郭芮图源 | 视觉中国安装PyMySQL库如果你想要使用python操作MySQL数据库&#xff0c;就必须先要安装pymysql库&#xff0c;这个库的安装很简单&#xff0c;直接使用pip install pymysql&#xff1b;假如这种方式还是安装不上&#xff0c;就用如下链…

Hyper-V的三种网卡

External 虚拟机和物理网络、本地主机都能通信 Internal 虚拟机之间互相通信&#xff0c;并且虚拟机能和本机通信 Private 仅允许运行在这台物理机上的虚拟机之间互相通信

filter-mapping中的dispatcher使用

web.xml里<filter-mapping>中的<dispatcher>作用 2.4版本的servlet规范在部属描述符中新增加了一个<dispatcher>元素&#xff0c;这个元素有四个可能的值&#xff1a;即 REQUEST,FORWARD,INCLUDE和ERROR 可以在一个<filter-mapping>元素中加入任意数目…

脉冲神经网络在目标检测的首次尝试,性能堪比CNN | AAAI 2020

译者 | VincentLee来源 | 晓飞的算法工程笔记脉冲神经网络(Spiking neural network, SNN)将脉冲神经元作为计算单元&#xff0c;能够模仿人类大脑的信息编码和处理过程。不同于CNN使用具体的值(continuous)进行信息传递&#xff0c;SNN通过脉冲序列(discrete)中每个脉冲发射时…

TCMalloc:线程缓存的Malloc

转载自&#xff1a; http://shiningray.cn/tcmalloc-thread-caching-malloc.html作者&#xff1a;Sanjay Ghemawat, Paul Menage 原文 翻译&#xff1a;ShiningRay 动机 TCMalloc要比glibc 2.3的malloc&#xff08;可以从一个叫作ptmalloc2的独立库获得&#xff09;和其他我测试…

今年央视的春晚能给人带来惊喜吗?

已经好多年还没看完中央电视台的春节联欢晚会自己就睡着了&#xff0c;说实在的&#xff0c;现在央视春节联欢晚会的节目总是让人期待后感到相当的平淡乏味&#xff0c;有些搞笑节目庸俗的让人笑不出来&#xff0c;绝大多数的节目都显得非常的人工&#xff0c;全然不能激发出观…

将baidu地图中的baidu logo去掉

Web 最简单方法&#xff0c;将logo的css样式改为display:none即可 <!DOCTYPE html> <html> <head><meta charset"utf-8" /><title>移除百度地图LOGO和版权信息</title><script type"text/javascript" src"htt…

Linux环境网络库

安装libevent 官网&#xff1a;http://libevent.org/ 书籍&#xff1a;http://www.wangafu.net/~nickm/libevent-book/ Libevent参考手册翻译:http://blog.csdn.net/laoyi19861011/article/category/831215 Libevent参考手册翻译增加&#xff1a;http://blog.sina.co…

万人马拉松赛事,人脸识别系统如何快速、准确完成校验?

作者 | 阿里文娱技术专家墨贤出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;大麦的人脸闸机在2019年杭州马拉松上成功的完成了刷脸入场功能的首秀&#xff0c;相比传统的马拉松入场核验方案在入场体验和入场效率上都有了很大的提升&#xff0c;下面介绍一下大麦的人…

Collection集合List、Set

Collection集合&#xff0c;用来保存一组数据的数据结构。 Collection是一个接口&#xff0c;定义了所有集合都应该包含的特征和行为 Collection派生出了两类集合 List和Set List接口&#xff1a;List集合的特征是元素是可重复且有序 Set接口&#xff1a;Set集合的特征是元素是…