按区间长度降序排序
维护区间指针 [l, r],第 l ~ r 条线段
表示当前区间可以满足条件
那么 r 后移一定不是更优的
因此 l 前移,使得 r 后移
过程中取最小值更新 answer

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string> using namespace std; #define LL long long #define gc getchar()
inline int read() {int x = ; char c = gc; while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc; return x;}
inline LL read_LL() {LL x = ; char c = gc; while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc; return x;}
#undef gc const int N = 1e6 + ; struct Node {int l, r, len;} G[N >> ];
int A[N];
int Max[N << ], W[N << ], F[N << ];
int n, m; inline bool Cmp(Node a, Node b) {return a.len > b.len;} #define lson jd << 1
#define rson jd << 1 | 1 void Push_down(int jd) {
F[lson] += F[jd], F[rson] += F[jd];
Max[lson] += F[jd], Max[rson] += F[jd];
F[jd] = ;
} void Sec_G(int l, int r, int jd, int x, int y, int num) {
if(x <= l && r <= y) {
Max[jd] += num;
F[jd] += num;
return ;
}
if(F[jd]) Push_down(jd);
int mid = (l + r) >> ;
if(x <= mid) Sec_G(l, mid, lson, x, y, num);
if(y > mid ) Sec_G(mid + , r, rson, x, y, num);
Max[jd] = max(Max[lson], Max[rson]);
} bool use[N]; int main() {
n = read(), m = read();
int tot = ;
for(int i = ; i <= n; i ++) {
G[i].l = read(), G[i].r = read(), G[i].len = G[i].r - G[i].l; A[++ tot] = G[i].l, A[++ tot] = G[i].r;
}
sort(G + , G + n + , Cmp);
sort(A + , A + tot + );
for(int i = ; i <= n; i ++) {
G[i].l = lower_bound(A + , A + tot + , G[i].l) - A;
G[i].r = lower_bound(A + , A + tot + , G[i].r) - A;
}
int R = , Answer = (int)1e9 + ;
for(int i = ; i <= n; i ++) {
if(R == n) break;
if(use[i] == ) {
Sec_G(, tot, , G[i].l, G[i].r, );
use[i] = ;
}
while(Max[] < m && R < n) {
R ++;
Sec_G(, tot, , G[R].l, G[R].r, );
use[R] = ;
if(Max[] >= m) {
Answer = min(Answer, G[i].len - G[R].len);
break;
}
}
if(use[i]) {
Sec_G(, tot, , G[i].l, G[i].r, -);
use[i] = ;
}
}
if(Answer == (int)1e9 + ) cout << "-1";
else cout << Answer;
return ;
}

最新文章

  1. Chrome的ERR_UNSAFE_PORT解决办法
  2. html3秒跳转
  3. HDU5730 FFT+CDQ分治
  4. Oracle用户、权限、角色管理
  5. Swift类型检查与转换
  6. 算法9-5:最大流算法的Java代码
  7. Xml读取异常--Invalid byte 1 of 1-byte UTF-8 sequence
  8. TranslateAnimation详解
  9. python2.x urllib2和urllib的使用
  10. Android开发 去掉标题栏方法 摘记
  11. 前端入门20-JavaScript进阶之异步回调的执行时机
  12. [Python]CentOS - ImportError: No module named &#39;_curses&#39;
  13. oracle外部表
  14. 利用 ajax自定义Form表单的提交方式
  15. windows环境下 php 将office文件(word/excel/ppt)转化为pdf(转)
  16. 数据模型model设置、生成数据迁移文件、执行数据迁移文件
  17. RTX服务端用户数据迁移说明
  18. isinstance和issubclass,__getattribute__,__getitem__,__setitem__,delitem__,__str__(三十五)
  19. ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来
  20. python webdriver api-读取、设置配置文件

热门文章

  1. vagrant root 登录虚拟机
  2. Mybatis之关联关系(一对多、多对多)
  3. 在论坛中出现的比较难的sql问题:20(触发器专题2)
  4. python多线程爬取斗图啦数据
  5. springboot笔记04——读取配置文件+使用slf4j日志
  6. 简单理解undefine和null的区别
  7. stm32 SD卡
  8. Oracle死锁处理实例
  9. 【转载】解密ThreadLocal
  10. 元类编程--__get__ __set__属性描述符