洛谷 1712 BZOJ 4653 [NOI2016]区间

【题解】
先把区间按照未离散化的长度排序,保存区间长度,然后离散化区间端点。每次把区间覆盖的点的覆盖次数加1,如果某个点被覆盖次数大于等于m,就从前往后开始删除区间直到没有一个点被覆盖的次数大于等于m,然后继续加入区间。边做边维护答案即可。
#include<cstdio>
#include<algorithm>
#define N 500010
#define rg register
#define ls (u<<1)
#define rs (u<<1|1)
using namespace std;
int n,m,b[N<<],ans=2e9;
struct tree{
int l,r,mx,del;
}a[N<<];
struct interval{
int l,r,len;
}itv[N];
inline int read(){
int k=,f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
return k*f;
}
inline int min(int x,int y){
return x<y?x:y;
}
inline bool cmp(interval a,interval b){
return a.len<b.len;
}
void build(int u,int l,int r){
a[u].l=l; a[u].r=r; int mid=(l+r)>>;
if(l<r) build(ls,l,mid),build(rs,mid+,r);
}
void update(int u,int l,int r,int del){
if(l<=a[u].l&&a[u].r<=r){
a[u].del+=del; a[u].mx+=del; return;
}
int d=a[u].del; a[u].del=;
a[ls].del+=d; a[rs].del+=d;
a[ls].mx+=d; a[rs].mx+=d;
int mid=(a[u].l+a[u].r)>>;
if(l<=mid) update(ls,l,r,del);
if(r>mid) update(rs,l,r,del);
a[u].mx=max(a[ls].mx,a[rs].mx);
}
int main(){
n=read(); m=read();
for(rg int i=;i<=n;i++)
itv[i].l=b[i]=read(),itv[i].r=b[i+n]=read(),itv[i].len=itv[i].r-itv[i].l;
sort(b+,b++(n<<)); int n2=unique(b+,b++(n<<))-b-;
for(rg int i=;i<=n;i++)
itv[i].l=lower_bound(b+,b++n2,itv[i].l)-b,
itv[i].r=lower_bound(b+,b++n2,itv[i].r)-b;
sort(itv+,itv++n,cmp);
build(,,n2);
int front=;
for(rg int rear=;rear<=n;rear++){
update(,itv[rear].l,itv[rear].r,);
while(a[].mx>=m&&front<=rear){
ans=min(ans,itv[rear].len-itv[front].len);
update(,itv[front].l,itv[front].r,-);
front++;
}
}
if(ans==2e9) puts("-1");
else printf("%d\n",ans);
return ;
}
洛谷 1712 BZOJ 4653 [NOI2016]区间的更多相关文章
- BZOJ4653 & 洛谷1712 & UOJ222:[NOI2016]区间——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4653 https://www.luogu.org/problemnew/show/P1712 ht ...
- BZOJ 4653 [Noi2016]区间(Two pointers+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4653 [题目大意] 在数轴上有n个闭区间 [l1,r1],[l2,r2],...,[l ...
- bzoj 4653: [Noi2016]区间
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- BZOJ.4653.[NOI2016]区间(线段树)
BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...
- BZOJ 4653: [Noi2016]区间 双指针 + 线段树
只要一堆线段有重叠次数大于等于 $m$ 次的位置,那么一定有解 因为重叠 $m$ 次只需 $m$ 个线断,将那些多余的线断排除掉即可 先将区间按照长度从小到大排序,再用 $two-pointer$ 从 ...
- 洛谷 P2486 BZOJ 2243 [SDOI2011]染色
题目描述 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段),如“112221” ...
- 洛谷 P1903 BZOJ 2120 清橙 A1274【模板】分块/带修改莫队(数颜色)(周奕超)
试题来源 2011中国国家集训队命题答辩 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- 洛谷 P2709 BZOJ 3781 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求$\sum_1^Kc_i^2$的值,其中$c_i$表示数字i在[L..R]中的重复次数.小B请 ...
- 洛谷 P1494 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)
//洛谷题面字体.排版我向来喜欢,却还没收录这道如此有名的题,BZOJ的题面字体太那啥啦,清橙的题面有了缩进,小标题却和正文字体一致,找个好看的题面咋这么难呐………… //2019年3月23日23:0 ...
随机推荐
- openstack dnsmasq
killall dnsmasq systemctl restart openstack-nova-compute /sbin/dnsmasq --conf-file=/var/lib/libvirt/ ...
- JAVA接口和抽象类的特点
接口的特点: 1:接口不可实例化,可结合多态进行使用(接口 对象=new 对象()) 2:接口里的成员属性全部是以 public(公开).static(静态).final(最终) 修饰符修饰 3:接口 ...
- v-contextmenu的使用(右键菜单)
先来个自己改写的图: 代码: 结构:<div class="wrap" v-contextmenu:contextmenu> <v-contextmenu ref ...
- P3154 [CQOI2009]循环赛
传送门 双倍经验题->这里 //minamoto #include<bits/stdc++.h> #define ll unsigned long long #define R re ...
- 所有版本chrome、chromedriver、firefox下载链接
1. 所有版本chrome下载 是不是很难找到老版本的chrome?博主收集了几个下载chrome老版本的网站,其中哪个下载的是原版的就不得而知了. http://www.slimjet.com/ch ...
- python使用mysql connection获取数据感知不到数据变化问题
在做数据同步校验的时候,需要从mysql fetch数据和hbase的数据进行对比,发现即使mysql数据变化了,类似下面的代码返回的值还是之前的数据.抽取的代码大概如下: import MySQL ...
- Python(1)-第一天
PTVS下载地址:https://pytools.codeplex.com/releases/view/109707 Python下载地址:https://www.python.org/downloa ...
- LN : JSON (利用C++实现JSON)
Appreciation to our TA, 王毅峰, who designed this task. 问题描述 JSON, JavaScript Object Notation,is an fle ...
- 关于定位中left和right,top和bottom的权重问题
关于定位中left和right,top和bottom的权重问题 在共同类中设置了定位并且设置了left等定位,如果你引用这个类并加入其他的类中也有left和right等定位,那么你设置的right或是 ...
- Django基础之创建程序
环境配置 安装python35 安装django:pip install django==1.9.5 创建django程序 1.命令行创建django程序 A django-admin startpr ...