CCPC E Problem Buyer
题目描述
有一些区间,还有一些点。
问最小的k使得选出任意k个区间,每个点都可以匹配上区间,一个区间只能匹配一次。
题解
考虑对于每一个点,我们有\(x\)个区间包含它,那么答案的一个下界是\(n-x+1\)。
但是这样没有考虑到一个区间被两个点匹配的情况。
那么我们从左到右做,没到一个点,就把右端点最靠左的合法区间删掉,可以证明这也是下界且可以达到。
代码
#include<bits/stdc++.h>
using namespace std;
#define N 100002
typedef long long ll;
int c[N],n,m;
int cnt;
inline ll rd(){
ll x=0;char c=getchar();bool f=0;
while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
return f?-x:x;
}
struct node{
int l,r;
inline bool operator <(const node &b)const{
return r>b.r;
}
}a[N];
priority_queue<node>q;
inline bool cmp(node a,node b){
if(a.l!=b.l)return a.l<b.l;
return a.r>b.r;
}
inline void solve(){
while(!q.empty())q.pop();
n=rd();m=rd();
for(int i=1;i<=n;++i){
a[i].l=rd();a[i].r=rd();
}
for(int i=1;i<=m;++i)c[i]=rd();
sort(c+1,c+m+1);
sort(a+1,a+n+1,cmp);
int p=0;
int ans=0;
for(int i=1;i<=m;++i){
while(p<n&&a[p+1].l<=c[i])p++,q.push(a[p]);
while(!q.empty()&&q.top().r<c[i])q.pop();
ans=max(ans,n-(int)q.size()+1);if(q.size())q.pop();
}
++cnt;
if(ans>n)printf("Case #%d: IMPOSSIBLE!\n",cnt);
else printf("Case #%d: %d\n",cnt,ans);
}
int main(){
int T=rd();
while(T--)solve();
return 0;
}
CCPC E Problem Buyer的更多相关文章
- hdu6003 Problem Buyer 贪心 给定n个区间,以及m个数,求从n个区间中任意选k个区间,满足m个数都能在k个区间中找到一个包含它的区间,如果一个区间包含了x,那么 该区间不能再去包含另一个数,即k>=m。求最小的k。如果不存在这样的k,输出“IMPOSSIBLE!”。
/** 题目:hdu6003 Problem Buyer 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6003 题意:给定n个区间,以及m个数,求从n个区 ...
- HDU 6003 Problem Buyer【小根堆】
任意k个都可以,也可以看做把不行的都选了,再随便选一个可以的要选的数量 把区间和m个值都排序,区间按l一序r二序排,枚举m个值,小根堆维护能帮韩当前枚举值的区间的右端点,这样方便删除区间,然后剩下的就 ...
- HDU 6003 Problem Buyer
贪心题(好久不做了) 题解 考虑最一般的,判断合法性? 经典贪心问题:左端点升序,左端点相同,右端点降序,c[i]升序 优先队列,每次选择覆盖x的右端点最小的区间. 称此方法为“区间匹配贪心” 最小的 ...
- CCPC 2016-2017, Finals Solution
A - The Third Cup is Free 水. #include<bits/stdc++.h> using namespace std; ; int n; int arr[max ...
- HDU 6271 Master of Connected Component(2017 CCPC 杭州 H题,树分块 + 并查集的撤销)
题目链接 2017 CCPC Hangzhou Problem H 思路:对树进行分块.把第一棵树分成$\sqrt{n}$块,第二棵树也分成$\sqrt{n}$块. 分块的时候满足每个块是一个 ...
- HDU 6270 Marriage (2017 CCPC 杭州赛区 G题,生成函数 + 容斥 + 分治NTT)
题目链接 2017 CCPC Hangzhou Problem G 题意描述很清晰. 考虑每个家庭有且仅有$k$对近亲的方案数: $C(a, k) * C(b, k) * k!$ 那么如果在第$1$ ...
- HDU 6240 Server(2017 CCPC哈尔滨站 K题,01分数规划 + 树状数组优化DP)
题目链接 2017 CCPC Harbin Problem K 题意 给定若干物品,每个物品可以覆盖一个区间.现在要覆盖区间$[1, t]$. 求选出来的物品的$\frac{∑a_{i}}{∑b_ ...
- HDU 6268 Master of Subgraph (2017 CCPC 杭州 E题,树分治 + 树上背包)
题目链接 2017 CCPC Hangzhou Problem E 题意 给定一棵树,每个点有一个权值,现在我们可以选一些连通的点,并且把这点选出来的点的权值相加,得到一个和. 求$[1, m] ...
- CCPC 2016-2017, Finals
A. HDU 5999 The Third Cup is Free 简单模拟. B. HDU 6000 Wash n 件衣服, m 个洗衣机,k 个烘干机.每个洗衣机和烘干机需要不同的时间.问 n 件 ...
随机推荐
- pkg-config too old的解决方法
linux下安装一些库时,会提示pkg-config too old,可以尝试下面的命令 apt-get install pkg-config
- django 的 MTV 流程图
- SecureCRT Linux系统ssh连接终端最常用快捷键
CecureCRT连接工具常用快捷键总结: 查看 Alt + Enter 全屏 菜单 Alt + f + n 克隆会话窗口 Alt + c 在新窗口中连接,连接窗口中勾选open in a tab可以 ...
- [Web 前端] 032 vue 初识
目录 0. 先下载 1. 先写个轮廓 2. 牛刀小试 2.1 例子 1 2.2 例子 2 3. 模板语法 上例子 4. 文本指令 上例子 5. 属性操作 上例子 6. 样式操作 上例子 类名的操作 s ...
- 【C语言--数据结构】线性表链式存储结构
直接贴代码 头文件 #ifndef __LINKLIST_H__ #define __LINKLIST_H__ typedef void LinkList; typedef struct _tag_L ...
- Eclipse连接SQL Server 2008数据库
一.准备材料 要能够使用数据库就要有相应的JDBC,所以我们要去Microsoft官网下载 https://www.microsoft.com/zh-cn/download/details.aspx? ...
- 堆”,"栈","堆栈","队列"以及它们的区别
如果你学过数据结构,就一定会遇到“堆”,"栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面试,这些都还会问到, ...
- lambda map() filter() zip()练习
练习: 用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb l=[{'name':'alex'},{'name':'y'}] l=[{'name':'alex'},{'name': ...
- APP登录时Token认证过程
1.App登录Token登录机制: 一般第一次安装App后,会让你进行注册后登录,而只要登录成功后,以后的每次启动App都是登录状态, 不需要每次启动时再登录.但有些App你若长期没有启动,它会提示你 ...
- I-最短的名字
在一个奇怪的村子中,很多人的名字都很长,比如aaaaa, bbb and abababab. 名字这么长,叫全名显然起来很不方便.所以村民之间一般只叫名字的前缀.比如叫’aaaaa’的时候可以只叫’a ...