ybtoj高效高階 貪心-3
有n頭牛在畜欄中吃草。每個畜欄在同一時間段只能提供給一頭牛吃草,所以可能會需要多個畜欄,給出第i頭牛開始吃草的時間區間[ai
,bi]
[a_i, b_i]
[ai,b
i] ,求需要的最少畜欄數和每頭牛對應的畜欄方案。
5
1 10
2 43 6
5 84 7
412
324
對每頭牛的開始時間從小到大排序
然後貪心?
對於第i個牛,它要麼是進新的畜欄,要麼是進已經沒牛的畜欄
1.進新的畜欄,那只有每個畜欄都有牛,才會開新的畜欄給這頭牛
2.進沒牛的畜欄,那就要對每個畜欄中的牛的區間用乙個小根堆去維護,然後判斷即可
#include
#include
#include
#include
#include
#include
using
namespace std;
int n, ans[
100005];
priority_queue int,
int>
, vectorint,
int>
>
, greaterint,
int>
>
> q;
struct tt
a[100005];
bool
cmp(tt a, tt b)
intmain()
//對應思路中的第一種情況
else
//第二種情況
}printf
("%d\n"
, q.
size()
);for(
int i =
1; i <= n;
++i)
printf
("%d\n"
, ans[i]);
}
ybtoj 貪心 堆 例題3 畜欄預定
傳送門題目 以奶牛開始吃草時間排序 可以發現,只要畜欄的最後一頭奶牛結束吃草時間越早,接上奶牛的可能性就越大 用小根堆,以畜欄的結束吃草時間實時排序 include include include include using namespace std struct dt a 50100 t int...
YbtOJ高效高階 貪心 2 雷達裝置
ybtoj高效高階 貪心 2 有n nn個建築物,第i ii個建築物在笛卡爾座標系上的座標為 xi yi x i,y i xi y i 你需要在x xx軸上安裝一些雷達,每個雷達的偵察半徑均為d dd 要求每個建築物都至少被乙個雷達偵測到,求最少要安裝幾個雷達。3 2 1 2 3 1 2 12每個點...
YbtOJ高效高階 二分 3 最大均值
ybtoj高效高階 二分 3 給定正整數序列a 求乙個平均數最大的,長度不小於 l 的 連續的 子段。10 66 4 21038 59 416500顯然二分 那要不然為啥是二分練習題呢 我們二分出這個平均值 然後把數列中每個數都減去這個平均值 然後找是否有一段長度不小於l的且和不為負數的數段即可 i...