BZOJ 4653: [Noi2016]区间 双指针 + 线段树
只要一堆线段有重叠次数大于等于 $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]区间 双指针 + 线段树的更多相关文章
- BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针
BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...
- 【题解】P1712 [NOI2016]区间(贪心+线段树)
[题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...
- [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],. ...
- BZOJ.4653.[NOI2016]区间(线段树)
BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...
- BZOJ 4653 [Noi2016]区间(Two pointers+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4653 [题目大意] 在数轴上有n个闭区间 [l1,r1],[l2,r2],...,[l ...
- 2018.08.17 bzoj4653: [Noi2016]区间(线段树+尺取法)
传送门 将坐标离散化之后直接用尺取法(双指针)+线段树维护. 其实就是说只要目前所有点的被覆盖次数是大于等于m的就移动左指针删除区间更新答案,否则移动右指针加入区间更新答案. 话说忘记排序以及建树的时 ...
- bzoj 4653: [Noi2016]区间
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- BZOJ4653 [NOI2016] 区间 【线段树】
题目分析: 首先思考一个二分答案的做法.我们可以注意到答案具有单调性,所以可以二分答案. 假设当前二分的答案是$ k $.那么按照大小顺序插入每个区间,同时在末端删除会对答案产生影响的区间.这里不妨用 ...
随机推荐
- 【嵌入式开发】用 VLC 显示 树莓派摄像头 H264 裸流
首先树莓派连上网络,并和电脑在同一网段. 树莓派的IP是: 192.168.3.13 电脑的IP是: 192.168.3.6 1.在树莓派上采集 H264裸流,并用UDP发送到电脑. pi@Neil- ...
- 在CentOS 8 Linux中安装使用Cockpit服务器管理软件
在本文中,我们将帮助您在CentOS 8服务器中安装Cockpit Web 控制台,以管理和监视本地系统以及网络环境中的Linux服务器.您还将学习如何将远程Linux主机添加到Cockpit并在Ce ...
- HDU 1114 Piggy-Bank(动态规划、完全背包)
Piggy-Bank Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- CMDB 理论
TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部门CCTA(Central Comput ...
- laravel框架之即點即改
//控制器層 public function ajaxsex(request $request) { $id = $request->get('id'); $fd = $request-> ...
- 部署 laravel项目404错误
1.nginx 下部署出现404错误 (1)打开php.ini中的php_openssl.dll这个扩展: (2)修改nginx 下的站点目录配置文件(我的是配置在vhost.conf)为: loca ...
- Android 开源项目及库汇总(2)
Android 开源项目及库汇总(2) ListenToCode 2.7 2018.10.10 15:43 字数 8527 阅读 1001评论 0喜欢 29 地图 百度地图– Android百度地图 ...
- KNN-机器学习算法
''' Created on Sep 16, 2010 kNN: k Nearest Neighbors Input: inX: vector to compare to existing datas ...
- vue打包时,assets目录 和static目录下文件的处理区别(nodeModule中插件源码修改后,打包后的文件应放在static目录)
为了回答这个问题,我们首先需要了解Webpack如何处理静态资产.在 *.vue 组件中,所有模板和CSS都会被 vue-html-loader 及 css-loader 解析,并查找资源URL.例如 ...
- tab栏切换效果案例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...