区间交集最值

简介: 笔记

题意


All our characters have hobbies. The same is true for Fedor. He enjoys shopping in the neighboring supermarket.


The goods in the supermarket have unique integer ids. Also, for every integer there is a product with id equal to this integer. Fedor has n discount coupons, the i-th of them can be used with products with ids ranging from li to ri, inclusive. Today Fedor wants to take exactly k coupons with him.


Fedor wants to choose the k coupons in such a way that the number of such products x that all coupons can be used with this product x is as large as possible (for better understanding, see examples). Fedor wants to save his time as well, so he asks you to choose coupons for him. Help Fedor!


Input

2.png

Output

3.png

Examples

样例 #1

4 2
1 100
40 70
120 130
125 180
31
1 2 

样例 #2


3 2
1 12
15 20
25 30


0
1 2


样例 #2


5 2
1 10
5 15
14 50
30 70
99 100


21
3 4

思路


题意:给出n个区间,求m个区间的最大覆盖,并输出覆盖的区间编号


k个区间交集 = 右端点最小值 - 左端点最大值


按区间左端点从小到大排序,用优先队列(小顶堆)维护k个右端点,保证每次选的都是最小的右端点r,用r减去这k个区间的最大l(排序后当前就是最大的l),此时求得即为被覆盖k次的区间的长度。不断进行,更新长度最大值。

int n, m;
struct node {
  int l, r;
  int id;
  bool operator<(const node &A) const {
    if (l == A.l) return r < A.r;
    return l < A.l;
  }
} a[N];
void solve() {
  cin >> n >> m;
  rep(i, 1, n) cin >> a[i].l >> a[i].r, a[i].id = i;
  sort(a + 1, a + 1 + n);
  pql q;
  int mx = 0, xx, yy;
  rep(i, 1, n) {
    q.push(a[i].r);
    if (q.sz > m) q.pop(); 
    int len = q.top() - a[i].l + 1; 
    if (q.sz == m && mx < len) {
      mx = len; 
      xx = a[i].l; 
      yy = q.top(); 
    } 
  }
  cout << mx << endl; 
  if (mx == 0) xx = 2e9, yy = -2e9; 
  for (int i = 1, j = 0; i <= n && j < m; i++) {
    if (a[i].l <= xx && a[i].r >= yy) {
      j++; 
      cout << a[i].id << ' ';
    } 
  }
}
相关文章
|
12月前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
481 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
安全 Java 数据库
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
这篇文章是关于Apache Shiro权限管理框架的详细学习指南,涵盖了Shiro的基本概念、认证与授权流程,并通过Spring Boot测试模块演示了Shiro在单应用环境下的使用,包括与IniRealm、JdbcRealm的集成以及自定义Realm的实现。
363 3
shiro学习一:了解shiro,学习执行shiro的流程。使用springboot的测试模块学习shiro单应用(demo 6个)
|
安全 算法 数据挖掘
《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)
《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)
205 1
《隐私计算简易速速上手小册》第2章:关键技术介绍(2024 最新版)
|
数据采集 XML 前端开发
Python爬虫实战:利用代理IP爬取百度翻译
Python 爬虫实战:利用代理 IP 爬取百度翻译
1091 2
|
存储 数据安全/隐私保护 Python
`zxcvbn`是一个用于密码强度估计的开源库,由Dropbox开发。它基于一系列启发式方法,包括密码字典、常见密码模式、键盘布局等,来评估密码的强度。
`zxcvbn`是一个用于密码强度估计的开源库,由Dropbox开发。它基于一系列启发式方法,包括密码字典、常见密码模式、键盘布局等,来评估密码的强度。
|
前端开发 JavaScript 开发者
JavaScript基础-异步编程:回调函数
【6月更文挑战第12天】本文介绍了JavaScript中的异步编程基础,重点讨论回调函数。回调函数是处理延迟操作的关键,常见于事件监听、定时器、Ajax请求和文件操作。然而,它们可能导致回调地狱、错误处理不一致和控制流混乱等问题。为了解决这些问题,文章推荐使用Promise链、async/await来扁平化异步逻辑,并提供了相关代码示例,强调了现代JavaScript特性的优势,以提升代码可读性和可维护性。
321 7
|
JSON 运维 安全
深入探索Linux的lsns命令:处理与分析Linux命名空间
`lsns`命令是Linux中用于查看命名空间信息的工具,帮助管理和隔离系统资源。它显示命名空间的状态、类型、进程和挂载点,适用于性能优化、故障排查。命令特点包括丰富的参数选项(如 `-t`、`-p`、`-n`),清晰的表格输出和JSON格式支持。示例:列出所有命名空间用`lsns`,列出网络命名空间用`lsns -t net`。使用时注意权限,结合其他工具,并考虑版本兼容性。
|
存储 SQL 分布式计算
从零到一建设数据中台 - 关键技术汇总
从零到一建设数据中台 - 关键技术汇总
376 0
|
人工智能 自然语言处理 API
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
3456 0
深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
|
安全 5G 网络安全
什么是 Wi-Fi 热点?
【8月更文挑战第24天】
3515 0