区间交集最值

简介: 笔记

题意


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 << ' ';
    } 
  }
}
相关文章
|
Python
VSCode运行Python教程
VSCode运行Python教程
3238 0
VSCode运行Python教程
|
Java 微服务 Spring
@EnableDiscoveryClient注解的作用
@EnableDiscoveryClient注解的作用 @EnableDiscoveryClient 及@EnableEurekaClient 类似,都是将一个微服务注册到Eureka Server(或其他 服务发现组件,例如Zookeeper、Consul等)
2284 0
|
9月前
ABCDEF题重磅更新|2025年华为杯|研究生数学建模|思路、代码、论文|持续更新中....
ABCDEF题重磅更新|2025年华为杯|研究生数学建模|思路、代码、论文|持续更新中....
468 3
|
11月前
|
人工智能 弹性计算 监控
【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地
全球首个K12教育超级智能体“寒雪老师”依托阿里云弹性计算,实现“超拟人”教学与教育普惠。智能精准学通过AI技术提供个性化学习方案,借助学习机等产品实现语音交互、答疑解惑,助力每个孩子拥有终身学习能力。面对实时交互与流量潮汐挑战,阿里云ECS与GPU算力保障低延迟、高并发服务稳定运行,实现30秒内弹性扩容,确保业务连续性。从实验室到千万课堂,算力支撑寒雪老师从城市到山区,推动AI教育公平发展。
|
9月前
|
存储 边缘计算 安全
TLS终止位置的安全影响深度解析:三种模式技术对比与选择建议
技术本质而言,TLS终止位置本质是信任边界的划分。ZeroNews 的创新在于将传统VPN式全权托管模式,解耦为可配置的信任模型——当密钥控制权100%归属用户时,即实现了真正意义上的"不可信基础设施"。
|
存储 Java Go
巧用 Go Map 特性对数组或切片去重
本文介绍了如何利用 Go 的复合数据类型 Map 的特性对数组或切片进行去重。值得注意的一个地方是,在使用 Map 构建 Set 时,Value 的数据类型指定为 struct{},原因是后面在添加键值对的时候,指定的 Value 为空结构体 strcut{}{},空结构体不占用内存空间。
1399 1
巧用 Go Map 特性对数组或切片去重
|
消息中间件 前端开发 Java
【国产化软件】接口开放平台:Java+Swagger+Vue3,适配移动端
本文档介绍了基于Java的开放平台技术栈及使用流程,涵盖从注册开发者账号、创建应用、申请令牌到调用API接口的全过程。平台提供丰富的接口管理和统计功能,支持开发者在线维护个人资料和接口令牌,同时兼容移动设备访问和黑夜模式。技术栈方面,后端采用Spring Boot 3 + MySQL + Redis + RabbitMQ + Nacos,前端则基于Vue3 + TypeScript 5.x + Element Plus + UnoCSS。访问开放平台的地址为:http://java.test.yesapi.cn/platform/。
|
人工智能
精通歌词结构技巧:写歌词的方法与实践,妙笔生词AI智能写歌词软件
歌词创作是音乐的灵魂,掌握其结构技巧至关重要。开头需迅速吸引听众,主体部分需结构清晰、情感丰富,结尾则要余韵悠长。无论是叙事还是抒情,妙笔生词智能写歌词软件都能助你一臂之力,提供AI智能创作、优化及解析等多功能支持,助你轻松驾驭歌词创作。
|
机器学习/深度学习 XML 分布式计算
大数据的概念
【10月更文挑战第16天】
886 4
|
监控 图形学
SolidWorks是目前结构工程领域最流行和广泛应用的3D CAD软件——下载安装教程
SolidWorks是一款流行且广泛应用于机械设计和工程学科的3D CAD软件,它可以帮助工程师实现3D建模、分析、绘制和制造各种机械部件和设备。该软件的建模工具与用户友好的操作界面使得工程师能够轻松创建各种图形、零部件和装配体。此外,SolidWorks还包括多种实用工具和模块,如模拟、生产和管理模块等,可以满足设计师在不同阶段的需求。其中模拟模块为工程师提供了可靠的设计评估和仿真工具,生产模块则可以用于规划和监控制造过程,而管理模块则是为用户提供了方便的协作和版本管理工具。