luogu2869 [USACO07DEC]美食的食草动物Gourmet Grazers
先满足挑剔的
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef long long ll;
int n, m, tmp, rot, cnt;
ll ans;
struct Cow{
int pri, gre;
}cow[100005];
struct Gra{
int pri, gre;
}gra[100005];
struct Treap{
int val[100005], hav[100005], l[100005], r[100005], rnd[100005];
void lRotate(int &k){
int t=r[k]; r[k] = l[t]; l[t] = k; k = t;
}
void rRotate(int &k){
int t=l[k]; l[k] = r[t]; r[t] = k; k = t;
}
void insert(int &k, int x){
if(!k){
k = ++cnt; hav[k] = 1;
val[k] = x; rnd[k] = rand();
return ;
}
if(val[k]==x) hav[k]++;
else if(val[k]<x){
insert(r[k], x);
if(rnd[r[k]]<rnd[k]) lRotate(k);
}
else{
insert(l[k], x);
if(rnd[l[k]]<rnd[k]) rRotate(k);
}
}
void queryNxt(int k, int x){
if(!k) return ;
if(val[k]>=x) tmp = val[k], queryNxt(l[k], x);
else queryNxt(r[k], x);
}
void del(int &k, int x){
if(!k) return ;
if(val[k]==x){
if(hav[k]>1){
hav[k]--;
return ;
}
if(l[k]*r[k]==0) k = l[k] + r[k];
else if(rnd[l[k]]<rnd[r[k]])
rRotate(k), del(k, x);
else
lRotate(k), del(k, x);
}
else if(val[k]<x) del(r[k], x);
else del(l[k], x);
}
}treap;
bool cmp1(Cow x, Cow y){
return x.gre>y.gre;
}
bool cmp2(Gra x, Gra y){
return x.gre>y.gre;
}
int main(){
cin>>n>>m;
for(int i=1; i<=n; i++)
scanf("%d %d", &cow[i].pri, &cow[i].gre);
for(int i=1; i<=m; i++)
scanf("%d %d", &gra[i].pri, &gra[i].gre);
sort(cow+1, cow+1+n, cmp1);
sort(gra+1, gra+1+m, cmp2);
int j=1;
for(int i=1; i<=n; i++){
tmp = -1;
while(j<=m && gra[j].gre>=cow[i].gre){
treap.insert(rot, gra[j].pri);
j++;
}
treap.queryNxt(rot, cow[i].pri);
if(tmp==-1){
cout<<"-1"<<endl;
return 0;
}
ans += tmp;
treap.del(rot, tmp);
}
cout<<ans<<endl;
return 0;
}
luogu2869 [USACO07DEC]美食的食草动物Gourmet Grazers的更多相关文章
- Luogu2869 [USACO07DEC]美食的食草动物Gourmet Grazers (贪心,二分,数据结构优化)
贪心 考场上因无优化与卡常T掉的\(n \log(n)\) //#include <iostream> #include <cstdio> #include <cstri ...
- P2869 [USACO07DEC]美食的食草动物Gourmet Grazers
P2869 [USACO07DEC]美食的食草动物Gourmet Grazers 题目:约翰的奶牛对食物越来越挑剔了.现在,商店有M 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用.第i 份 ...
- LG_2869_[USACO07DEC]美食的食草动物Gourmet Grazers
题目描述 Like so many others, the cows have developed very haughty tastes and will no longer graze on ju ...
- [USACO07DEC]美食的食草动物Gourmet Grazers
---题面--- 题解: 首先观察题面,直觉上对于一头奶牛,肯定要给它配pi和qi符合条件的草中两者尽量低的草,以节省下好草给高要求的牛. 实际上这是对的,但观察到两者尽量低这个条件并不明确,无法用于 ...
- POJ3622 Gourmet Grazers(FHQ Treap)
Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2363 Accepted: 881 Description Like s ...
- bzoj1691/luogu2869 [USACO07DEC]挑剔的美食家 (STL::set)
给牛和草都按价格排序,然后贪心地把草给牛(就是尽量给满足价格的.要求的美味度最高但不超过这个草的美味度的牛) 这个可以用一个平衡树来维护,偷懒直接用multiset了 #include<bits ...
- POJ 3622 Gourmet Grazers(贪心)
[题目链接] http://poj.org/problem?id=3622 [题目大意] 给出一些物品拥有两个属性值,价格和精美程度 给出一些需求表示要求获得的物品两个属性值的两种属性下界, 一个物品 ...
- luogu 2869 挑剔的美食家
Gourmet Grazers 传送门 题目大意 约翰的奶牛对食物越来越挑剔了.现在,商店有\(M\) 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用.第\(i\) 份牧草的价格为\(P_i ...
- POJ1058 The Gourmet Club
题目来源:http://poj.org/problem?id=1058 题目大意:ACM城的美食俱乐部有16位成员.他们连续了当地的法国餐厅Chatrau Java来安排连续5天的晚餐.晚餐时他们每4 ...
随机推荐
- Codeforces Round #319 (Div. 2)
水 A - Multiplication Table 不要想复杂,第一题就是纯暴力 代码: #include <cstdio> #include <algorithm> #in ...
- VS Code 自用插件备份
自用插件备份 Auto Close Tag 自动闭合标签 Atuo Rename Tag 更改前面标签的时候, 自动更改后面的闭合标签 Guides 对齐线 open-in-browser 在浏览器中 ...
- python programming
1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list
- jquery选择器 选择除当前点击元素外所有的元素
问题: 多个select选择,如果已选择某些value ,该value不可再选 思路: 点击当前元素,js列出除当前元素外所有的元素 当前解决办法: function symbolDefine(ob ...
- archsummit_bj2016
http://bj2016.archsummit.com/schedule 大会日程 2016年12月02日,星期五 7:45-9:00 签到 8:45-9:00 开始入场 9:00-9:30 开场致 ...
- 【C#】枚举
枚举 public static class CommonEnums { public enum people { /// <summary> ///男人 /// </summary ...
- 【学习笔记】深入理解js原型和闭包(15)——闭包
前面提到的上下文环境和作用域的知识,除了了解这些知识之外,还是理解闭包的基础. 至于“闭包”这个词的概念的文字描述,确实不好解释,我看过很多遍,但是现在还是记不住. 但是你只需要知道应用的两种情况即可 ...
- LNMP笔记:解决mail函数不能发送邮件
用LNMP环境,在探针里测试发送邮件,失败了.已经确定mail()函数是开启的. 问题根源 没有安装或启动 sendmail 组件 解决办法 我是新手,命令不熟,所以写的很详细,老鸟勿喷哦 1.重新安 ...
- 什么是Entitlement
Entitlement(权限),可以想象成App里用于描述该App可以调用哪些服务的字符串.苹果的操作系统(mac os或者iOS)会通过检查这个串,决定这个应用是否可以调用相关功能.比如iCloud ...
- Python——集合与字典练习
集合与字典练习question1问题描述:有一个列表,其中包括 10 个元素,例如这个列表是[1,2,3,4,5,6,7,8,9,0],要求将列表中的每个元素一次向前移动一个位置,第一个元素到列表的最 ...