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 个区间, ...
随机推荐
- Could not resolve view with name '***' in servlet with name 'dispatcher'
今天在开发中遇到了一个问题,控制层使用的是SpringMVC框架. @RequestMapping("historyDetail") private String History( ...
- 【深度学习系列】用PaddlePaddle和Tensorflow实现AlexNet
上周我们用PaddlePaddle和Tensorflow实现了图像分类,分别用自己手写的一个简单的CNN网络simple_cnn和LeNet-5的CNN网络识别cifar-10数据集.在上周的实验表现 ...
- viewer.js的简单练习
html <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8& ...
- thinkphp框架知识点
基本配置 define('APP_DEBUG',true);//开启debug模式 //记录日志 'LOG_RECORD' => true, //系统日志在记录的时候需要开启debug调试模式, ...
- UWP ListView下模板宽度问题
在ListView中模板的宽度默认不会根据listView的宽度改变为改变,这需要更改一下设置,重点在于设置HorizontalContentAlignment的拉伸模式.注意是HorizontalC ...
- jmeter接口系列:时间戳、加密
JMeter安装配置 从官网下载JMeter的软件包apache-jmeter-x.x.zip,下载完成之后解压打开jmeter.bat即可. 说明 这里使用的jmeter版本是3.0,jdk版本是j ...
- 05.haproxy+mysql负载均衡 整合 redis集群+ssm
本篇重点讲解haproxy+mysql负载均衡,搭建完成后与之前搭建的redis+ssm进行整合 (注:这里用到了两台mysql数据库,分别安装两台虚拟机上,已经成功实现主主复制,如果有需要,请查看我 ...
- NOI导刊2010提高装备运输
www.luogu.org/problem/show?pid=1794 挺裸的一题背包,算很基础. 可以运用的技巧是三维->二维(节省空间还能少敲一点代码 #include<iostrea ...
- node基础篇一:node介绍、node http、node event 课堂(持续)
最近工作一直很忙,没时间更新,谅解,这次准备更新一次node教程,本课堂将持续更新,每周坚持更新一到两章,希望对大家有一些小帮助吧: 一.首先什么是node? 1/Node.js 是一个基于 Chro ...
- python爬虫(二)_HTTP的请求和响应
HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...