传送门

考虑将所有的区间按长度排序

考虑怎么判断点被多少区间覆盖,这个可以离散化之后用一棵权值线段树来搞

然后维护两个指针$l,r$,当被覆盖次数最多的点的覆盖次数小于$m$时不断右移$r$,在覆盖次数大于等于$m$时不断右移$l$,然后每一次用$len[r]-len[l]$更新答案,其中$len$表示该区间的长度

 //minamoto
#include<iostream>
#include<cstdio>
#include<algorithm>
#define inf 0x3f3f3f3f
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,:;}
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=5e5+;
int sum[N<<],add[N<<],L[N],R[N],val[N<<],n,m,lim,cnt,ans=inf;
struct node{
int len,id;
node(){}
node(int len,int id):len(len),id(id){}
inline bool operator <(const node &b)const
{return len<b.len;}
}a[N];
inline void upd(int p){
if(add[p]){
add[p<<]+=add[p],add[p<<|]+=add[p];
sum[p<<]+=add[p],sum[p<<|]+=add[p];
add[p]=;
}
}
void update(int p,int l,int r,int ql,int qr,int val){
if(ql>r||qr<l) return;
if(ql<=l&&qr>=r) return (void)(add[p]+=val,sum[p]+=val);
int mid=(l+r)>>;upd(p);
update(p<<,l,mid,ql,qr,val);
update(p<<|,mid+,r,ql,qr,val);
sum[p]=max(sum[p<<],sum[p<<|]);
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read();
for(int i=;i<=n;++i)
L[i]=val[++cnt]=read(),R[i]=val[++cnt]=read(),a[i]=node(R[i]-L[i],i);
sort(a+,a++n);
sort(val+,val++cnt),lim=unique(val+,val++cnt)-val-;
for(int i=;i<=n;++i)
L[i]=lower_bound(val+,val++lim,L[i])-val,R[i]=lower_bound(val+,val++lim,R[i])-val;
int l=,r=;
while(true){
while(sum[]<m&&r<n){
int i=a[++r].id,u=L[i],v=R[i];
update(,,lim,u,v,);
}
if(sum[]<m) break;
while(sum[]>=m&&l<n){
int i=a[++l].id,u=L[i],v=R[i];
update(,,lim,u,v,-);
}
cmin(ans,a[r].len-a[l].len);
}
printf("%d\n",ans==inf?-:ans);
return ;
}

最新文章

  1. 【BZOJ-3697&amp;3127】采药人的路径&amp;YinandYang 点分治 + 乱搞
  2. Java实现找出数组中重复次数最多的元素以及个数
  3. WIFI(1)WIFI直连 + socket 可以用来实现类似蓝牙传输数据的功能
  4. mingw32 下编译 zlib
  5. 最火的Android开源项目(一)
  6. elasticsearch spring 集成
  7. poj1338
  8. hdu1159 LCS模板题
  9. PopupWindow的基本使用
  10. 遇见未知的CSS
  11. xamarin android 在代码中如何设置文本颜色
  12. 【应知应会】15个常用的JavaScript字符串操作方法
  13. 山西大同大学教务处学生端--送给学弟,学妹的礼物,可在PC端,手机端操作
  14. 继承LinearLayout自定义左侧菜单
  15. Gym - 101848B Almost AP 暴力
  16. 5、 LwIP协议栈规范翻译——操作系统仿真层
  17. Post Tuned Hashing,PTH
  18. d2-admin中那些不错的技巧
  19. openCV函数
  20. MUI 打包android app

热门文章

  1. 利用crtmpserver搭建rtmp服务器
  2. php 批量删除数据
  3. Sping框架概述
  4. Could not get unknown property &#39;packageForR&#39; for task &#39;:app:processDebugReso
  5. Linux-VMware三种网络模式
  6. jmeter测试总结
  7. Ansible 动态获取主机列表
  8. android vector pathData探究,几分钟绘制自己的vectordrawable
  9. BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
  10. 为什么要把页面放在 WEB-INF 路径下?