【题目大意】

有n头奶牛m种牧草,每种牧草有它的价格和鲜嫩度。每头奶牛要求它的牧草的鲜嫩度要不低于一个值,价格也不低于一个值。每种牧草只会被一头牛选择。问最少要多少钱?

【思路】

显然的贪心,把奶牛和牧草都按照鲜嫩度由大到小排序,对于每奶牛把鲜嫩度大于它的都扔进treap,然后找出后继。

不过注意后继的概念是大于它且最小的,然而我们这里是可以等于的,所以应该是找cow[i].fresh-1的后继,注意一下……

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int MAXN=+;
const int INF=0x7fffffff;
struct node
{
int fresh,price;
bool operator < (const node &x) const
{
return (fresh>x.fresh);//注意是由大到小排序
}
}cow[MAXN],grass[MAXN];
struct treap
{
int key,cnt,priority;
treap* lson;
treap* rson;
treap()
{
cnt=;
priority=rand();
lson=rson=NULL;
}
};
treap* root=NULL;
int n,m; void RightRotate(treap* &rt)
{
treap* tmp=rt->lson;
rt->lson=tmp->rson;
tmp->rson=rt;
rt=tmp;
} void LeftRotate(treap* &rt)
{
treap* tmp=rt->rson;
rt->rson=tmp->lson;
tmp->lson=rt;
rt=tmp;
} void insert(treap* &rt,int x)
{
if (rt==NULL)
{
rt=new treap;//不要忘记了新建
rt->key=x;
}
else if (rt->key==x) rt->cnt++;
else
{
if (rt->key>x)
{
insert(rt->lson,x);
if (rt->lson->priority>rt->priority) RightRotate(rt);
}
if (rt->key<x)
{
insert(rt->rson,x);
if (rt->rson->priority>rt->priority) LeftRotate(rt);
}
}
} void del(treap* &rt,int x)
{
if (rt->key==x)
{
if (rt->cnt>) rt->cnt--;
else
{
treap* tmp=rt;
if (rt->lson==NULL)
{
rt=rt->rson;
delete tmp;
}
else if (rt->rson==NULL)
{
rt=rt->lson;
delete tmp;
}
else
{
if (rt->lson->priority>rt->rson->priority) RightRotate(rt),del(rt->rson,x);
else LeftRotate(rt),del(rt->lson,x);
}
}
}
else
{
if (x<rt->key) del(rt->lson,x);
else del(rt->rson,x);
}
} int suc(treap* &rt,int x)
{
int ans=INF;
treap* tmp=rt;
while (tmp)
{
if (tmp->key>x)
{
ans=min(ans,tmp->key);
tmp=tmp->lson;
}
else tmp=tmp->rson;
}
return ans;
} void init()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d%d",&cow[i].price,&cow[i].fresh);
for (int i=;i<=m;i++) scanf("%d%d",&grass[i].price,&grass[i].fresh);
sort(cow+,cow+n+);
sort(grass+,grass+m+);
} ll solve()
{
int j=;
ll ans=;
for (int i=;i<=n;i++)
{
while (grass[j].fresh>=cow[i].fresh && j<=m)
{
insert(root,grass[j].price);//这里一开始把j打成i了
j++;
}
int find=suc(root,cow[i].price-);//注意由于这里是不低于,也就是≥,并不是取cow[i].price的后继,而是cow[i].price-1的
if (find==INF) return(-);
else
{
ans+=(ll)find;
del(root,find);
}
}
return ans;
} int main()
{
init();
printf("%lld",solve());
return ;
}

【贪心+Treap】BZOJ1691-[Usaco2007 Dec]挑剔的美食家的更多相关文章

  1. [BZOJ1691][Usaco2007 Dec]挑剔的美食家

    [BZOJ1691][Usaco2007 Dec]挑剔的美食家 试题描述 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了. ...

  2. bzoj1691[Usaco2007 Dec]挑剔的美食家 平衡树treap

    Description 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了.现在,Farmer John不得不去牧草专供商那里 ...

  3. 【贪心】【二维偏序】【权值分块】bzoj1691 [Usaco2007 Dec]挑剔的美食家

    既然题目中的要求满足二维偏序,那么我们很自然地想到将所有东西(草和牛)都读进来之后,对一维(美味度)排序,然后在另一维(价值)中取当前最小的. 于是,Splay.mutiset.权值分块什么的都支持查 ...

  4. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家 [treap 贪心]

    1691: [Usaco2007 Dec]挑剔的美食家 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 391[Submit][S ...

  5. BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心

    BZOJ_1691_[Usaco2007 Dec]挑剔的美食家_贪心 题意: 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返 ...

  6. BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )

    按鲜嫩程度排个序, 从大到小处理, 用平衡树维护价值 ---------------------------------------------------------------------- #i ...

  7. BZOJ1691: [Usaco2007 Dec]挑剔的美食家

    传送门: 一句话题解:贪心+treap 好几天前刚学的treap,然后真到了考treap又写不出来,这么辣鸡还搞什么OI 先按$A_i$递减排序,然后把$C_i$也递减排序,然后用一个指针指向$M$序 ...

  8. 「BZOJ1691」[Usaco2007 Dec] 挑剔的美食家 (Treap)

    Description 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了.现在,Farmer John不得不去牧草专供商那里 ...

  9. 【BZOJ】1691: [Usaco2007 Dec]挑剔的美食家(set+贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1691 懒得打平衡树了.... 而且multiset是很快的... 排到了rank1 T_T 贪心就是 ...

随机推荐

  1. Sublime之插件的安装(一)

    由于最近刚换了一个工作,所以决定重新申请一个blog,把工作当中遇到的一些问题记录下来,方便自己下次忘记,也希望能与一起需要的小伙伴一起共勉. 如果有不同的观点或者是不同的看法,大家都可以畅谈,我一直 ...

  2. qq上传文件进行测试要点分析

    功能 QQ 兼容性 1.Win系统/Mac系统  Android/IOS 品牌 传 1.上传方式:直接拖拽,按回车键上传 2.多个文件同时上传给一人/多人(考虑稳定性,是否存在内存泄露) 3.不是好友 ...

  3. 自己看之区间DP

    //菜鸡制作,看的时候可能三目运算符略烦;;; 区间DP入门题:Brackets 地址:http://59.77.139.92/Problem.jsp?pid=1463 分析(对区间DP的代码原理进行 ...

  4. 实现在点击asp:button按钮后,不刷新当前页面

    方法1:return false <asp:Button ID="Button1" runat="server" Text="Button&qu ...

  5. [会装]Hive安装(基于mysql数据库)

    环境信息:Mac 安装步骤: 1. 下载hive组件(我选择的是社区的2.0.1版本) http://apache.mirror.globo.tech/hive/hive-2.0.1/ 2. 下载my ...

  6. [ python ] 线程的操作

    目录 (见右侧目录栏导航) - 1. 前言    - 1.1 进程    - 1.2 有了进程为什么要有线程    - 1.3 线程的出现    - 1.4 进程和线程的关系    - 1.5 线程的 ...

  7. [Linux: vim]vim自动生成html代码

    如果直接将vim编辑的文字复制粘贴到一些blog的编辑器中,这些代码将会是死板的白纸黑字.如果能加入关键字高亮功能就好了,这样代码阅读起来会很方便.一些blog的编辑器提供了这项功能,一些没有,一些支 ...

  8. [Ext JS 4]后台自动产生图档

    前言 [Ext JS 4] 实战之将chart导出为png, jpg 格式的文件 承接上一篇, 我们可以做到在Browser端打开一个Chart,并导出为png或是jpg 等格式的图档. 但实际的需求 ...

  9. 【58沈剑架构系列】DB主从一致性架构优化4种方法

    需求缘起 大部分互联网的业务都是“读多写少”的场景,数据库层面,读性能往往成为瓶颈.如下图:业界通常采用“一主多从,读写分离,冗余多个读库”的数据库架构来提升数据库的读性能. 这种架构的一个潜在缺点是 ...

  10. <<Javascript Patterns>>阅读笔记 -- 第2章 基本技巧(二)

    关于for-in循环 循环数据时, 强烈不推荐使用for-in循环.因为当Array对象被扩展后, 再用for-in循环遍历数据会导致逻辑上的错误, 举例说明: var arr = ['a', 'b' ...