博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 4653: [Noi2016]区间
阅读量:5058 次
发布时间:2019-06-12

本文共 1569 字,大约阅读时间需要 5 分钟。

Description

在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn]。现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置。换句话说,就是使得存在一个 x,使得对于每一个被选中的区间 [li,ri],都有 li≤x≤ri。
对于一个合法的选取方案,它的花费为被选中的最长区间长度减去被选中的最短区间长度。区间 [li,ri] 的长度定义为 ri−li,即等于它的右端点的值减去左端点的值。
求所有合法方案中最小的花费。如果不存在合法的方案,输出 −1.

解题报告:

难得一道做得出的NOI,首先发现那一个相交的点一定可以是区间的某个端点,所以可以离散左右端点,那么问题就简单了,然后仔细推敲,发现可以按区间长度排序,然后不就是尺取法了么?如果有一个点被覆盖的次数>=m我们就移动左指针,不然我们就一直往后走,对于覆盖次数>=m我们就维护线段树区间最大值,然后区间修改维护指针移动即可

#include 
#include
#include
#include
#include
#include
#define RG register#define il inline#define iter iterator#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)?(a):(b))#define ls (node<<1)#define rs (node<<1|1)using namespace std;const int N=500005;int b[N<<1],num=0,n,m,tr[N<<4],mark[N<<4];struct node{ int l,r,val; bool operator <(const node &pr)const{return val
se || r
>1;pushdown(node); updata(l,mid,ls,sa,se,ad);updata(mid+1,r,rs,sa,se,ad); upd(node);}void work(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d%d",&a[i].l,&a[i].r),a[i].val=a[i].r-a[i].l; b[++num]=a[i].l;b[++num]=a[i].r; } sort(a+1,a+n+1);sort(b+1,b+num+1); int tot=unique(b+1,b+num+1)-b-1; for(int i=1;i<=n;i++){ a[i].l=lower_bound(b+1,b+tot+1,a[i].l)-b; a[i].r=lower_bound(b+1,b+tot+1,a[i].r)-b; } int l=1,ans=2e9; for(int i=1;i<=n;i++){ updata(1,tot,1,a[i].l,a[i].r,1); while(tr[1]>=m && l
=m)ans=Min(ans,a[i].val-a[l].val); } if(ans!=2e9)printf("%d\n",ans); else puts("-1");}int main(){ work(); return 0;}

转载于:https://www.cnblogs.com/Yuzao/p/7570777.html

你可能感兴趣的文章
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>
IOS-图片操作集合
查看>>
Android bitmap图片处理
查看>>
Android应用程序进程启动过程的源代码分析
查看>>
adb logcat 命令行用法
查看>>
Redis学习手册(Key操作命令)
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
非对称加密
查看>>
bzoj 3413: 匹配
查看>>
从下周开始就要采用网上记录值班日志了
查看>>
在qq中可以使用添加标签功能
查看>>
eclipse 自定义布局
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>