bzoj 4653: [Noi2016]区间
Description
Input
Output
Sample Input
3 5
1 2
3 4
2 2
1 5
1 4
Sample Output
HINT
Source
这道题和极差最小生成树有点像,就是枚举一个区间作为长度最短的区间,求得满足覆盖>=m次的最大的区间的长度最小;
暴力的做法是把长度sort一边,从前往后枚举最小边,对于每一个枚举的最小长度区间,一直往后加,直到覆盖m次后break;
至于如何判断是否覆盖了>=m次,这就是线段树区间加法了;
然后我们发现左端点是单调的,因为是在同样有点满足覆盖>=m次的条件下,后面的肯定比前面优,所以就可用单调队列扫一遍即可
坐标离散化一下。。。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ls (x<<1)
#define rs (x<<1|1)
using namespace std;
const int N=1000000;
const int Inf=2147483647;
struct data{
int l,r,len;
}q[N];
int tr[N*4],lazy[N*4],hsh[N],num[N],tot,n,m;
bool cmp(const data &a,const data &b){
return a.len<b.len;
}
void pushdown(int x){
tr[ls]+=lazy[x],tr[rs]+=lazy[x];
lazy[ls]+=lazy[x];lazy[rs]+=lazy[x];lazy[x]=0;
}
void pushup(int x){
tr[x]=max(tr[ls],tr[rs]);
}
void update(int x,int l,int r,int xl,int xr,int v){
if(xl<=l&&r<=xr){
lazy[x]+=v;tr[x]+=v;return;
}
if(lazy[x]) pushdown(x);
int mid=(l+r)>>1;
if(xr<=mid) update(ls,l,mid,xl,xr,v);
else if(xl>mid) update(rs,mid+1,r,xl,xr,v);
else update(ls,l,mid,xl,mid,v),update(rs,mid+1,r,mid+1,xr,v);
pushup(x);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d%d",&q[i].l,&q[i].r);
hsh[++tot]=q[i].l;hsh[++tot]=q[i].r;
}
sort(hsh+1,hsh+tot+1),tot=unique(hsh+1,hsh+tot+1)-hsh-1;
for(int i=1;i<=n;i++){
q[i].l=lower_bound(hsh+1,hsh+1+tot,q[i].l)-hsh;
q[i].r=lower_bound(hsh+1,hsh+1+tot,q[i].r)-hsh;
q[i].len=hsh[q[i].r]-hsh[q[i].l];
}
int head=1,ans=Inf;sort(q+1,q+1+n,cmp);
for(int i=1;i<=n;i++){
update(1,1,tot,q[i].l,q[i].r,1);
while(tr[1]>=m){
ans=min(q[i].len-q[head].len,ans);
update(1,1,tot,q[head].l,q[head].r,-1);
head++;
}
}
if(ans==Inf) puts("-1");
else printf("%d\n",ans);
}
bzoj 4653: [Noi2016]区间的更多相关文章
- BZOJ 4653 [Noi2016]区间(Two pointers+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4653 [题目大意] 在数轴上有n个闭区间 [l1,r1],[l2,r2],...,[l ...
- BZOJ.4653.[NOI2016]区间(线段树)
BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...
- 洛谷 1712 BZOJ 4653 [NOI2016]区间
[题解] 先把区间按照未离散化的长度排序,保存区间长度,然后离散化区间端点.每次把区间覆盖的点的覆盖次数加1,如果某个点被覆盖次数大于等于m,就从前往后开始删除区间直到没有一个点被覆盖的次数大于等于m ...
- BZOJ 4653: [Noi2016]区间 双指针 + 线段树
只要一堆线段有重叠次数大于等于 $m$ 次的位置,那么一定有解 因为重叠 $m$ 次只需 $m$ 个线断,将那些多余的线断排除掉即可 先将区间按照长度从小到大排序,再用 $two-pointer$ 从 ...
- [Noi2016]区间[离散化+线段树维护+决策单调性]
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 621 Solved: 329[Submit][Status][D ...
- [BZOJ4653][NOI2016]区间 贪心+线段树
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...
- [NOI2016]区间 题解(决策单调性+线段树优化)
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1593 Solved: 869[Submit][Status][ ...
- BZOJ4653 [NOI2016]区间 [线段树,离散化]
题目传送门 区间 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就 ...
- BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针
BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...
随机推荐
- head first python菜鸟学习笔记(第七章) ——web应用之为数据建模
问题1. #意思是从athletelist.py中导入AthleteListfrom athletelist import AthleteList 源程序代码 import pickle from a ...
- 74、django之ajax补充
之前的ajax使用都是依据jquery来使用的,本篇会先分析ajax的原生的js代码实现,还有jsonp的介绍,与OMR的一些遗漏补充. 本篇导航: js实现的ajax 同源策略与Jsonp 一.js ...
- PHP防止SQL注入和XSS攻击
PHP防止SQL注入和XSS攻击PHP防范SQL注入是一个非常重要的安全手段.一个优秀的PHP程序员除了要能顺利的编写代码,还需要具备使程序处于安全环境下的能力.说到网站安全,就不得不提到SQL注入( ...
- 前端测试框架Jest系列教程 -- Asynchronous(测试异步代码)
写在前面: 在JavaScript代码中,异步运行是很常见的.当你有异步运行的代码时,Jest需要知道它测试的代码何时完成,然后才能继续进行另一个测试.Jest提供了几种方法来处理这个问题. 测试异步 ...
- PHP 使用redis实现秒杀
PHP 使用redis实现秒杀 使用redis队列,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用(mysql事务在高并发下性能下降很厉害,文件锁的方式也是) 先将商品库存如队 ...
- staticmethod、classmethod的使用
staticmethod 首先要明白两个概念 绑定方法:但凡是定义在类的内部,并且没有被任何装饰器修饰过的方法,就是绑定方法,并且有自动传值功能.类直接调用该方法时,改方法叫做类的函数属性:对象在调用 ...
- Eclipse Maven Mybatis的使用
关于maven的使用网上有太多教程,这里就不再介绍.本篇文章只用来记录 在Eclipse中使用maven创建含有mybatis的程序的配置,及注意事项. 使用Eclipse创建Maven项目 创建后的 ...
- SQL-Oracle内实现柱形图式的效果
在SQL SERVER内有一个函数replicate()可以实现柱形图效果,本质上是利用字符重复出现的次数来控制柱形图的长短,效果如图: 如果要在Oracle内实现相同的效果,则需要自己写一个函数: ...
- Cocos游戏引擎,让小保安成就大梦想
秦丕胜是大连的一位保安.与非常多自学成才的人一样,2010年,在考上日照职业技术学院一年后便退了学. 因为没有高学历.加上喜欢自由,他来到了大连成为了一名保安.从高中開始,秦丕胜就酷爱代码,他曾自豪地 ...
- hdu4932 Miaomiao's Geometry (BestCoder Round #4 枚举)
题目链接:pid=4932" style="color:rgb(202,0,0); text-decoration:none">http://acm.hdu.edu ...