CCPC E Problem Buyer
2024-08-28 22:31:52
题目描述
有一些区间,还有一些点。
问最小的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;
}
最新文章
- 算法手记 之 数据结构(线段树详解)(POJ 3468)
- 当文本溢出包含的元素时加省略号之text-overflow
- 获取css style值
- LoadRunner - 当DiscuzNT遇上了Loadrunner(中) (转发)
- Java学习笔记(六):面向对象、接口和抽象类
- backboneJs 导图
- 对于观察者模式,Reactor模式,Proactor模式的一点理解
- 如何将DataTable转换成List<;T>;呢?
- SpringSecurity 在MVC 中的简单使用(翻译的,稍加改动)
- UIViewController的生命周期(图解)
- iOS 编译64位FFMPEG
- Android日语输入法Simeji使用示例
- 管理tips
- 像写C#一样编写java代码
- laravel框架cookie应用到中间件的理解
- 缺陷的背后---LIMIT M,N 分页查找
- Beta冲刺三
- 解决nginx发布网站跨目录访问
- L300 3月英语课下
- IDEA Maven项目 编译的问题
热门文章
- 如何将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
- 学习总结&;实验报告1
- mybatis使用map传递多参数报错:A query was run and no Result Maps were found for the Mapped Statement
- sql query执行的顺序
- webapi接口统一返回请求时间
- Tomcat 一台机器运行多个Tomcat
- django项目学习之异步框架celery
- 原生js事件委托(事件代理)方法扩展
- 洛谷 - P1522 - 牛的旅行 - Cow Tours - Floyd
- Maven clean install 跳过单元测试