畜栏预定(0x07 贪心)

简介: 笔记

畜栏预定


题意

有 N 头牛在畜栏中吃草。


每个畜栏在同一时间段只能提供给一头牛吃草,所以可能会需要多个畜栏。


给定 N 头牛和每头牛开始吃草的时间 A 以及结束吃草的时间 B,每头牛在 [A,B] 这一时间段内都会一直吃草。


当两头牛的吃草区间存在交集时(包括端点),这两头牛不能被安排在同一个畜栏吃草。


求需要的最小畜栏数目和每头牛对应的畜栏方案。


思路

将问题转换为,将一些区间分配到一些数轴上,同一数轴上的任意两个区间没有交集,问最少需要多少个数轴。


将区间按左端点升序排序,同时用一个优先队列(小根堆)存储每个数轴上区间右端点的最大值,那么堆顶就是右端点最小的数轴,如果最小的右端点都和待入的区间有交集,那么放在其他的数轴自然也会有交集。 如果当前区间能插入到某个数轴,那么更新此数轴的右端点为当前区间的右端点,否则只能开辟一个新的数组,并将其右端点设置为当前区间的右端点。


最后统计优先队列的大小即为最终答案。


代码

#include<bits/stdc++.h>
#include<unordered_map>
// #define int long long
#define INF 0x3f3f3f3f
#define mod 1000000007
#define rep(i, st, ed) for (int (i) = (st); (i) <= (ed);++(i))
#define pre(i, ed, st) for (int (i) = (ed); (i) >= (st);--(i))
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
template<typename T> inline T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<typename T> inline T lowbit(T x) { return x & -x; }
const int N = 5e4 + 10;
int n;
struct Node {
  int l;
  int r;
  int idx;
  bool operator<(Node x) const {
    return l < x.l;
  }
}node[N];
int res[N];
priority_queue<PII, vector<PII>, greater<PII>>q; //小根堆
void solve() {
  cin >> n;
  for (int i = 1; i <= n; ++i)cin >> node[i].l, cin >> node[i].r, node[i].idx = i;
  sort(node + 1, node + 1 + n);
  for (int i = 1; i <= n; ++i) {
    if (!q.size())q.push({ node[i].r ,1 }), res[node[i].idx] = 1;
    else {
      if (q.top().first >= node[i].l) {
        q.push({ node[i].r ,q.size() + 1});
        res[node[i].idx] = q.size();
      }
      else {
        auto t = q.top();
        q.pop();
        t.first = node[i].r;
        res[node[i].idx] = t.second;
        q.push(t);
      }
    }
  }
  cout << q.size() << endl;
  for (int i = 1; i <= n; ++i)printf("%d\n", res[i]);
}
signed main() {
  // int t; cin >> t;
  // while (t--)
    solve();
  return 0;
}


目录
相关文章
|
3月前
|
人工智能 机器人 调度
[理论篇-10]AI 工作流(AI Workflow)—— 让 AI 像流水线一样干活 ⚠️ 已逐步被多 Agent 架构替代
用最直白的话讲清楚什么是 AI 工作流、它和"扔给 AI 一个 Prompt"有什么本质区别、为什么 2025 年之后所有真正能落地的 AI 产品几乎都长成"工作流"的样子——不管你是开发者、产品经理、运营、还是只想自己搭一个 AI 助手的普通用户,这一篇读完都能看懂背后在发生什么。
3052 2
|
6月前
|
人工智能 自然语言处理 数据挖掘
智能体来了:从 0 到 1 搭建属于你的 AI 工作流
AI 正在从“对话工具”升级为“工作伙伴”。越来越多的工作可以通过 AI 工作流自动完成,例如信息整理、内容生成、数据分析与流程执行。本文从 0 到 1 介绍什么是 AI 工作流、为什么每个人都值得拥有自己的 AI 工作流,以及如何一步步搭建一个真正能提升效率的个人 AI 工作流系统。
2263 1
|
机器学习/深度学习 人工智能 自然语言处理
面向认知智能的AI推理体系:理论基础与工程实践
本文深入探讨了AI推理从“感知智能”迈向“认知智能”的理论框架与技术突破。文章分析了符号推理、神经推理及混合推理的优劣势,指出了多跳推理、因果推理和可解释性等挑战。同时,结合大语言模型、ReAct架构和知识增强推理等前沿技术,展示了AI推理在代码实现中的应用。未来,认知图谱、推理驱动的智能体、边缘推理优化及人机协同将成为重要方向,推动AI向通用人工智能(AGI)迈进。
1768 60
面向认知智能的AI推理体系:理论基础与工程实践
|
监控 数据可视化 安全
从零开始学 Dify:搭建你的第一个 LLM 应用平台
Dify(Do It For You)是一个开源的 LLMOps 平台,专注于缩短 AI 原型与生产应用之间的距离。它通过「可视化 + API 优先」的方式,帮助开发者快速构建、测试、监控并上线基于大型语言模型(LLM)的解决方案,支持从聊天机器人、检索增强生成(RAG),再到代理 Agent 的全功能覆盖。
|
人工智能 文字识别 算法框架/工具
《探索鸿蒙Next上人工智能图像编辑应用的技术路径》
在鸿蒙Next系统的支持下,AI图像编辑应用迎来新机遇。开发者可利用系统原生AI能力(如智能识别、OCR文字识别与抠图),集成第三方AI框架(如TensorFlow、PyTorch),运用分布式技术实现多设备协同编辑,并采用微内核架构和原子化服务提升安全性和用户体验。此外,优化用户交互设计,提供简洁直观的操作界面,确保应用高效稳定运行。
604 21
|
机器学习/深度学习 人工智能 自然语言处理
【图像生成技术】人工智能在医疗健康领域的应用实例:图像生成技术的革新实践
在当今医疗健康的前沿阵地,人工智能(AI)技术正以前所未有的速度重塑着医疗服务的面貌,其中图像生成技术尤其在提升诊断精度、优化治疗策略及增强医疗教育方面展现出了巨大潜力。以下将通过一个简化的示例,展示如何利用深度学习模型,特别是生成对抗网络(GANs),来生成医学图像,并讨论其在实际医疗场景中的应用价值。
744 6
|
Shell Linux C语言
CentOS完美升级gcc方案
CentOS完美升级gcc方案
3611 0
|
机器学习/深度学习 PyTorch 算法框架/工具
【文献学习】Phase-Aware Speech Enhancement with Deep Complex U-Net
文章介绍了Deep Complex U-Net模型,用于复数值的语音增强,提出了新的极坐标掩码方法和wSDR损失函数,并通过多种评估指标验证了其性能。
488 1