区间(bzoj 4653)
Description
Input
Output
Sample Input
3 5
1 2
3 4
2 2
1 5
1 4
Sample Output
/*
不得不说,本弱是真弱啊,这道题的思路好像不是很难,但是就是想不出。
首先将区间离散化,然后按照区间长度排序,一种暴力的方法是枚举左区间,然后枚举用线段树判定找到第一个满足条件的右区间,这样的方法是O(n^2logn)的。
其实我们可以发现对于递增的左区间来说,第一个满足条件的右区间也是递增的,这样复杂度就降到了O(nlogn)。
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define N 500010
#define inf 1000000000
using namespace std;
int b[N*],n,m;
int mx[N*],tag[N*];
struct node{int l,r,len;}a[N];
bool cmp(const node&x,const node&y){return x.len<y.len;} void push_up(int k){
mx[k]=max(mx[k*],mx[k*+]);
}
void push_down(int k){
if(!tag[k]) return;
mx[k*]+=tag[k];
tag[k*]+=tag[k];
mx[k*+]+=tag[k];
tag[k*+]+=tag[k];
tag[k]=;
}
void add(int k,int l,int r,int x,int y,int val){
if(l>=x&&r<=y){
mx[k]+=val;
tag[k]+=val;
return;
}
push_down(k);
int mid=l+r>>;
if(x<=mid) add(k*,l,mid,x,y,val);
if(y>mid) add(k*+,mid+,r,x,y,val);
push_up(k);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i].l,&a[i].r);
a[i].len=a[i].r-a[i].l;
b[i*-]=a[i].l;
b[i*]=a[i].r;
}
sort(b+,b+n*+);
int tot=unique(b+,b+*n+)-b-;
for(int i=;i<=n;i++){
a[i].l=lower_bound(b+,b+tot+,a[i].l)-b;
a[i].r=lower_bound(b+,b+tot+,a[i].r)-b;
}
sort(a+,a+n+,cmp);
int tt=,ans=inf;
for(int i=;i<=n;i++){
while(mx[]<m&&tt<=n){
add(,,tot,a[tt].l,a[tt].r,);
tt++;
}
if(mx[]>=m) ans=min(ans,a[tt-].len-a[i].len);
add(,,tot,a[i].l,a[i].r,-);
}
if(ans!=inf) printf("%d",ans);
else printf("-1");
return ;
}
区间(bzoj 4653)的更多相关文章
- AC日记——NOI2016区间 bzoj 4653
4653 思路: 线段树,指针滑动: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1000005 #def ...
- BZOJ 4653 [Noi2016]区间(Two pointers+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4653 [题目大意] 在数轴上有n个闭区间 [l1,r1],[l2,r2],...,[l ...
- bzoj 4653: [Noi2016]区间
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- BZOJ.4653.[NOI2016]区间(线段树)
BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...
- 洛谷 1712 BZOJ 4653 [NOI2016]区间
[题解] 先把区间按照未离散化的长度排序,保存区间长度,然后离散化区间端点.每次把区间覆盖的点的覆盖次数加1,如果某个点被覆盖次数大于等于m,就从前往后开始删除区间直到没有一个点被覆盖的次数大于等于m ...
- BZOJ 4653: [Noi2016]区间 双指针 + 线段树
只要一堆线段有重叠次数大于等于 $m$ 次的位置,那么一定有解 因为重叠 $m$ 次只需 $m$ 个线断,将那些多余的线断排除掉即可 先将区间按照长度从小到大排序,再用 $two-pointer$ 从 ...
- BZOJ4653 [NOI2016]区间 [线段树,离散化]
题目传送门 区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就 ...
- [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转
题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
随机推荐
- sshd 防止暴力破解
- Qt的index 用方法static_cast<CTableItem*>(index.internalPointer())取出来的值的成员都未初始化
mediaData = 0x01046380 {m_Deviceid={...} m_Title={...} m_Type={...} ...} 里面是这样的值,内存已经释放,但是没有remove:
- fiddler抓包-简单易操作(一)
1.下载fiddler 可以到fiddler官网去下,网址:https://www.telerik.com/download/fiddler 下载完成后,安装即可. 2.运行fiddler,进入fid ...
- result returns more than one elements此种错误,解决
场景:公司产品开发完成后,接入第三方厂商,在进行接口联调的时候出现此问题.此接口报文中的每一个数据都要进行校验,有些是与已经存入产品数据库中的数据进行对比,看是否存在. 问题:在测试中,有些测试没有问 ...
- 目标检测之Faster-RCNN的pytorch代码详解(数据预处理篇)
首先贴上代码原作者的github:https://github.com/chenyuntc/simple-faster-rcnn-pytorch(非代码作者,博文只解释代码) 今天看完了simple- ...
- AM5728通过GPMC接口与FPGA高速数据通信实现
硬件:AM5728开发板:Artix-7开发板软件:Linux am57xx-evm 4.4.19:Vivado 2015.2作者:杭州矢志信息科技有限公司邮箱:admin@sysjoint.com ...
- MongoDB复制二:复制集的管理
1.修改oplog的大小 需要在每个机器上都配置.先在secondary上操作,最后在primary上操作. 1)以单机的方式重启复制集的实例 db.shutdownServer() 在新的端口中启 ...
- PokeCats开发者日志(六)
现在是PokeCats游戏开发的第九天的晚上,终于将这玩意提交到360移动开放平台进行审核了. 貌似很多平台都需要看这个著作权证明,得了,那我就话400块钱走一遍流程玩玩吧! 办理著作权还 ...
- 【UML】状态图介绍
1.Statechart Diagram 即状态图,主要用于描述一个对象在其生存期间的动态行为,表现为一个对象所经历的状态序列.引起状态转移的事件(Event).因状态转移而伴随的动作(Action) ...
- PHP与webserver【简书看到的】
很久以前,人们造出来一个机器人,它的英文名字叫web server,中文名叫网页服务器.(为了简写,下文称web server为server) server的工作很简单,就是做内容的分发. 初期的se ...