AcWing 906 區間分組

2021-09-29 23:37:42 字數 784 閱讀 7481

這個區間貪心問題,是要按照區間左端點排序。

和之前區間問題一樣,我們需要分情況討論貪心決策

1.如果乙個區間的左端點比當前每乙個組的最右端點都要小,那麼意味著要開乙個新區間了,這個條件還可以優化成,乙個區間左端點比最小組的右端點都要小就開乙個新組。

2.如果乙個區間的左端點比最小組的右端點大,那麼就放在該組,這其實也是乙個貪心,因為是先考慮最容易放入乙個區間的組嘛

這道題對於資料結構上的選擇也要考慮,用乙個小頂堆,也就是優先佇列來儲存每乙個組的最右端點是最好的資料結構了。

步驟1.按區間左端點排序

2.掃瞄所有區間,按以上情況分開處理

3.最後堆中存的所有資料的個數就是組的個數

#include

#include

#include

#include

using

namespace std;

const

int n=

1e5+5;

struct range

}ranges[n]

;int

main()

sort

(ranges,ranges+n)

; priority_queue<

int, vector<

int>

, greater<

int>> heap;

for(

int i=

0;icout << heap.

size()

;}

Acwing 906 區間分組

906.區間分組 給定n個閉區間 ai,bi 請你將這些區間分成若干組,使得每組內部的區間兩兩之間 包括端點 沒有交集,並使得組數盡可能小。輸出最小組數。輸入格式 第一行包含整數n,表示區間數。接下來n行,每行包含兩個整數ai,bi,表示乙個區間的兩個端點。輸出格式 輸出乙個整數,表示最小組數。資料...

AcWing 906 區間分組

目錄貪心演算法求解 新的思路 參考文章 給定 n 個閉區間 ai,bi 請你將這些區間分成若干組,使得每組內部的區間兩兩之間 包括端點 沒有交集,並使得組數盡可能小。輸出最小組數。輸入格式 第一行包含整數 n,表示區間數。接下來 n 行,每行包含兩個整數 ai,bi,表示乙個區間的兩個端點。輸出格式...

Acwing 905 區間選點

給定n個閉區間 ai,bi 請你在數軸上選擇盡量少的點,使得每個區間內至少包含乙個選出的點。輸出選擇的點的最小數量。位於區間端點上的點也算作區間內。輸入格式 第一行包含整數n,表示區間數。接下來n行,每行包含兩個整數ai,bi 表示乙個區間的兩個端點。輸出格式 輸出乙個整數,表示所需的點的最小數量。...