只要一堆线段有重叠次数大于等于 $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. Akka系列(六):Actor解决了什么问题?

    前言..... 文档来源于  : What problems does the actor model solve? Actor解决了什么问题? Akka使用Actor模型来克服传统面向对象编程模型的 ...

  2. c语言1作业07

    这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9932 我在这个课程的目 ...

  3. Centos7单机安装Tableau2018.2

    cd先将服务器防火墙80级8850端口打开 临时关闭SELinux/防火墙 setenforce 0 iptables -F 重点 重点 不能用root用户安装 不能用root用户安装 第一步先创建一 ...

  4. vue中Runtime-Compiler和Runtime-only的区别

    一.选择Runtime-Compiler和Runtime-only不同模式的时候main.js文件的区别    二.vue程序运行过程 1.解析: 第一步,当把vue模板template传给Vue实例 ...

  5. Spring boot启动后没有生成日志文件问题排错

    我的配置是: logging.file.name=spring-boot.log logging.file.path=D:/log/ 系统启动后日志文件没有生成 原因:一开始以为这两个属性是配合着使用 ...

  6. Django查询数据库返回字典dict数据

    个人观点: 个人认为,在Django项目中, 开发团队为了让使用该框架的用户都使用自带的序列化功能,从而让框架中的SQL返回值很不直观,对于直接使用SQL语句的用户很犯难. 解决: from djan ...

  7. import和from.…import…

    import和from.-import- 在讲之前我们先来讲一下怎样去下载第三方库,我们把python看作一部手机,pip就是应用管家,第三方库里面的模块就是应用管家里面的一个应用 一.import模 ...

  8. CSP-S全国模拟赛第三场 【nan死了】

    mmt 居然第一步膜化乘除 都没看出来,没救了... 大概是贡献前缀和优化的做法 巨兔式讲解:大家都学会了么? 咱发现有大量的 (i/j , i%j ) 同时 对很多 c 产生了贡献,咱可以去优化这一 ...

  9. Codeforces1256E_Yet Another Division Into Teams

    题意 n个人,每人有一个能力值a[i],要求分成多个队伍,每个队伍至少3个人,使得所有队伍的max(a[i])-min(a[i])之和最小. 分析 不会巧妙的dp,想了一天只想到了暴力的dp. 先排序 ...

  10. 在Asp.net core使用配置Json创建动态目录树

    一.前言 使用动态目录树可以使左边栏中的目录更加灵活,本文介绍如何将目录保存在json配置文件中,再读取出来经过处理后生成目录树. 二.数据结构 1. TreeMenuNode类名 将TreeMenu ...