YbtOJ 贪心算法课堂过关 例3 畜栏预定【贪心】
发布日期:2021-05-07 13:09:42 浏览次数:18 分类:技术文章

本文共 793 字,大约阅读时间需要 2 分钟。

在这里插入图片描述


思路

这道题容易想到用贪心做。

首先肯定要排序,
之后会发现当一个奶牛的左区间边界大于另一个奶牛的右区间边界就可以共用一个畜栏。
这样暴力做是 O ( n 2 ) O(n^2) O(n2),发现可以用小根堆来维护右区间边界。
则时间复杂度可以优化成 O ( n log ⁡ n ) O(n\log n) O(nlogn)

C o d e Code Code

#include
#include
#include
#include
#include
using namespace std;int anss[100010],js;int n,ans,c;priority_queue
q;struct node{ int a,b[2];}fi[1000010];bool cmp(const node&f,const node&c){ return f.a
>n; for(int i=1; i<=n; i++) scanf("%d%d",&fi[i].a,&fi[i].b[0]); sort(fi+1,fi+1+n,cmp); for(int i=1; i<=n; i++) { fi[fi[i].b[0]].b[1]=i; //存储位置,以便输出共用畜栏时的序号 q.push(-fi[i].b[0]); if(fi[i].a<=-q.top()) //一个奶牛的左区间边界不大于另一个奶牛的右区间边界 ans++,c++,anss[++js]=c; else //一个奶牛的左区间边界大于另一个奶牛的右区间边界 { anss[++js]=fi[-q.top()].b[1]; q.pop(); } } cout<
<
上一篇:YbtOJ 贪心算法课堂过关 例4 国王游戏【贪心】
下一篇:YbtOJ 贪心算法课堂过关 例2 雷达装置【贪心】

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月13日 01时53分08秒