news 2026/5/2 18:31:27

【ACWing】111. 畜栏预定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ACWing】111. 畜栏预定

题目地址:

https://www.acwing.com/problem/content/113/

N NN头牛在畜栏中吃草。每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏。给定N NN头牛和每头牛开始吃草的时间A AA以及结束吃草的时间B BB,每头牛在[ A , B ] [A,B][A,B]这一时间段内都会一直吃草。当两头牛的吃草区间存在交集时(包括端点),这两头牛不能被安排在同一个畜栏吃草。求需要的最小畜栏数目和每头牛对应的畜栏方案。

输入格式:
1 11行:输入一个整数N NN
2.. N + 1 2..N+12..N+1行:第i + 1 i+1i+1行输入第i ii头牛的开始吃草时间A AA以及结束吃草时间B BB,数之间用空格隔开。

输出格式:
1 11行:输出一个整数,代表所需最小畜栏数。
2.. N + 1 2..N+12..N+1行:第i + 1 i+1i+1行输出第i ii头牛被安排到的畜栏编号,编号是从1 11开始的连续整数,只要方案合法即可。

数据范围:
1 ≤ N ≤ 50000 1≤N≤500001N50000,
1 ≤ A , B ≤ 1000000 1≤A,B≤10000001A,B1000000

本质上,问题可以转换为,给定若干闭区间,要求将它们分组,使得同一组内的区间两两不相交,问最少的分组数,和分组方案。思路和证明参考https://blog.csdn.net/qq_46105170/article/details/113734794。代码如下:

#include<algorithm>#include<iostream>#include<queue>usingnamespacestd;constintN=5e4+10;intn;structCow{intid,l,r;}cow[N];intres[N];intmain(){scanf("%d",&n);for(inti=1;i<=n;i++){cow[i].id=i;scanf("%d%d",&cow[i].l,&cow[i].r);}sort(cow+1,cow+1+n,[&](auto&c1,auto&c2){returnc1.l<c2.l;});autocmp=[&](auto&c1,auto&c2){returnc1.r>c2.r;};priority_queue<Cow,vector<Cow>,decltype(cmp)>heap(cmp);intid=0;for(inti=1;i<=n;i++){auto&c=cow[i];if(heap.size()&&heap.top().r<c.l){autoctop=heap.top();heap.pop();res[c.id]=res[ctop.id];}elseres[c.id]=++id;heap.push(c);}printf("%d\n",id);for(inti=1;i<=n;i++)printf("%d\n",res[i]);}

时间复杂度O ( N log ⁡ N ) O(N\log N)O(NlogN),空间O ( N ) O(N)O(N)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 5:00:30

Windows剪贴板的超级增强器,提升你的工作效率

Windows剪贴板的超级增强器,提升你的工作效率 在日常的电脑操作中,复制粘贴无疑是使用频率极高的功能。然而,Windows自带的剪贴板功能却显得捉襟见肘,每次复制新内容时,旧的内容就会被无情地覆盖。这对于需要频繁切换或重复使用之前复制内容的用户来说,无疑是一个巨大的痛…

作者头像 李华
网站建设 2026/4/22 14:33:57

@AutoConfigureBefore 与 @AutoConfigureAfter

目录 1、介绍 1.1、设计目的 1.2、定义 1.3、作用域 1.4、设计限制 2、应用 2.1、使用场景 2.2、工作原理 2.3、实战示例 3、常见误区与最佳实践 3.1、最佳实践 3.2、常见误区 3.3、与其他顺序控制注解对比 前沿 控制 Spring Boot 自动配置顺序&#xff1a; “我…

作者头像 李华
网站建设 2026/4/30 22:47:35

Qt----事件简述

目录1&#xff0c;事件的概念2&#xff0c;事件循环3&#xff0c;父子控件之间事件的传递处理4&#xff0c;事件过滤器1&#xff0c;事件的概念 定义&#xff1a; 事件是应用程序内部发生的事情或应用程序需要知道的外部事件的结果。 事件和信号的区别&#xff1a; 事件是由外…

作者头像 李华
网站建设 2026/4/30 22:50:14

AXI-A7.4.3 Atomic transactions attributes

一、atomic transactions are as follows: 1. AWLEN和AWSIZE指定写数据的字节数(对于AtomicCompare需包含比较值和交换值) AWLEN(突发长度)和AWSIZE(每次传输的字节数)共同决定了原子事务中写数据的总字节数。对于大多数原子事务,这指的是操作数的大小;但对于AtomicCom…

作者头像 李华
网站建设 2026/4/30 23:58:49

内存泄漏怎么定位和解决?core dump有哪些信息?

一、为什么会内存泄漏&#xff1f;常见场景&#xff1a;音频播放反复malloc缓冲区未freeMQTT断线重连时不断分配内存呢解析JSON字符串频繁申请堆空间回调注册后未注销导致上下文无法释放使用全局链表或队列但不清除节点二、如何定位内存泄漏&#xff1f;1、添加内存监控接口在T…

作者头像 李华
网站建设 2026/5/2 17:24:12

STL deque 的详细特征

STL deque 的详细特征 基本特性 #include <deque> using namespace std;deque<int> dq; // 声明一个int类型的双端队列 双端队列&#xff1a;允许在两端进行高效插入和删除动态数组&#xff1a;支持随机访问&#xff0c;可以像数组一样通过下标访问内存结构&a…

作者头像 李华