只要一堆线段有重叠次数大于等于 $m$ 次的位置,那么一定有解

因为重叠 $m$ 次只需 $m$ 个线断,将那些多余的线断排除掉即可

先将区间按照长度从小到大排序,再用 $two-pointer$ 从左到右扫描

不难发现左右两个指针都是不递减的,所以时间复杂度是 $O(\texttt{nlogn})$ 的

#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
namespace IO {
inline void setIO(string s) {
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
}
};
const int maxn=500005;
const int inf=1000030000;
int n,m;
namespace tree {
int tag[maxn*5],maxv[maxn*5];
inline void pushup(int now) {
maxv[now]=tag[now];
maxv[now]+=max(maxv[now<<1],maxv[now<<1|1]);
}
void update(int l,int r,int now,int L,int R,int v) {
if(l>=L&&r<=R) {
tag[now]+=v, maxv[now]+=v;
return;
}
int mid=(l+r)>>1;
if(L<=mid) update(l,mid,now<<1,L,R,v);
if(R>mid) update(mid+1,r,now<<1|1,L,R,v);
pushup(now);
}
int query(int l,int r,int now,int L,int R) {
if(l>=L&&r<=R) return maxv[now];
int mid=(l+r)>>1,re=0;
if(L<=mid) re=max(re,query(l,mid,now<<1,L,R));
if(R>mid) re=max(re,query(mid+1,r,now<<1|1,L,R));
return re+tag[now];
}
};
int Arr[maxn*2];
struct Seg {
int l,r,len,L,R;
}seg[maxn];
bool cmp(Seg a,Seg b) {
return a.len<b.len;
}
int main() {
// IO::setIO("input");
scanf("%d%d",&n,&m);
int cc=0,i,j;
for(i=1;i<=n;++i) {
scanf("%d%d",&seg[i].l,&seg[i].r);
seg[i].len=seg[i].r-seg[i].l;
Arr[++cc]=seg[i].l,Arr[++cc]=seg[i].r;
}
sort(seg+1,seg+1+n,cmp);
sort(Arr+1,Arr+1+cc);
for(i=1;i<=n;++i) {
seg[i].L=lower_bound(Arr+1,Arr+1+cc,seg[i].l)-Arr;
seg[i].R=lower_bound(Arr+1,Arr+1+cc,seg[i].r)-Arr;
}
int ans=inf;
int l=1,r=0;
while(l<=n&&r<=n) {
if(tree::query(1,cc,1,1,cc)>=m) {
ans=min(ans, seg[r].len-seg[l].len);
tree::update(1,cc,1,seg[l].L,seg[l].R,-1);
++l;
}
else {
++r;
if(r<=n) tree::update(1,cc,1,seg[r].L,seg[r].R,1);
}
}
printf("%d\n",ans==inf?-1:ans);
return 0;
}

  

BZOJ 4653: [Noi2016]区间 双指针 + 线段树的更多相关文章

  1. BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针

    BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...

  2. 【题解】P1712 [NOI2016]区间(贪心+线段树)

    [题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...

  3. [Noi2016]区间[离散化+线段树维护+决策单调性]

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 621  Solved: 329[Submit][Status][D ...

  4. [BZOJ4653][NOI2016]区间 贪心+线段树

    4653: [Noi2016]区间 Time Limit: 60 Sec  Memory Limit: 256 MB Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],. ...

  5. BZOJ.4653.[NOI2016]区间(线段树)

    BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...

  6. BZOJ 4653 [Noi2016]区间(Two pointers+线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4653 [题目大意] 在数轴上有n个闭区间 [l1,r1],[l2,r2],...,[l ...

  7. 2018.08.17 bzoj4653: [Noi2016]区间(线段树+尺取法)

    传送门 将坐标离散化之后直接用尺取法(双指针)+线段树维护. 其实就是说只要目前所有点的被覆盖次数是大于等于m的就移动左指针删除区间更新答案,否则移动右指针加入区间更新答案. 话说忘记排序以及建树的时 ...

  8. bzoj 4653: [Noi2016]区间

    Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...

  9. BZOJ4653 [NOI2016] 区间 【线段树】

    题目分析: 首先思考一个二分答案的做法.我们可以注意到答案具有单调性,所以可以二分答案. 假设当前二分的答案是$ k $.那么按照大小顺序插入每个区间,同时在末端删除会对答案产生影响的区间.这里不妨用 ...

随机推荐

  1. oracle truncate表 恢复操作

    truncate恢复表 1.创建测试用表 conn elan/elan create table haha as select * from dba_users; 2.查询表数据 ) from hah ...

  2. 交换机安全学习笔记 第八章 针对POE的攻击

    POE即 Power over Ethernet 借助于以太网供电.最初为了IP电话,目前主要用于功耗小于15.4w的设备例如Ap和视频监控设备.并且简化了相关设备的电力线布线. 英文缩写注释:PSE ...

  3. Java第六周实验+总结

    一.实验目的 (1)掌握类的继承 1.子类继承父类中非private的成员变量和成员方法,同时,注意构造方法不能被子类继承. 2.定义类时若缺省extends关键字,则所定义的类为java.lang. ...

  4. centoss7下将命令加开机服务

    https://www.cnblogs.com/hxun/p/11075755.html

  5. [转帖]2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起【组图】

    2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起[组图] https://www.qianzhan.com/analyst/detail/220/190215-4b1d6868.ht ...

  6. 小记---------maxwell启动闪退问题

    日志报错信息如下:大致是说因为maxwell在对接mysql时伪装成一个从库slave,但是uuid重复.猜想是其他部门同事也在同时使用maxwell,都使用的是maxwell默认的uuid ,从而导 ...

  7. mongodb增删改查常用命令总结

    前言 去年我还折腾过mongodb,后来用不到也就没碰了,这就导致了我忘的一干二净,不得不感叹,编程这东西只要不用,就会忘没了.现在我想重拾mongodb,来总结一下常用命令,主要就是增删改查. 另外 ...

  8. 【挣扎失败】2019CSP-S 游记

    妈耶…… 今年是作为高中生参赛的第一年……然而…… 心痛 洛谷评分,一橙一蓝两紫两黑 我个菜鸡瑟瑟发抖 在考完后三天的信息课码的,刚写没几个字就要下课了 抽空把这个写完

  9. 项目常用的几个mysql函数

    1.find_in_set函数 find_in_set(str,strlist); str是一个字符串 strlist是字符串列表--一个有多个子链被“,”分开的字符串 有多种情况: a.str为nu ...

  10. [转载]神经网络偏置项(bias)的设置及作用

    [转载]神经网络偏置项(bias)的设置及作用 原文来自:https://www.cnblogs.com/shuaishuaidefeizhu/p/6832541.html 1.什么是bias? 偏置 ...