區間合併(計蒜網)

2021-10-23 04:45:21 字數 1107 閱讀 6623

蒜頭君給定 nn 個閉區間 [a_i, b_i] [a i,b i ],其中 i=1,2,…,ni=1,2,…,n。

任意兩個相鄰或相交的閉區間可以合併為乙個閉區間。例如,[1,2][1,2] 和 [2,3][2,3] 可以合併為 [1,3][1,3],[1,3][1,3] 和 [2,4][2,4] 可以合併為 [1,4][1,4],但是 [1,2][1,2] 和 [3,4][3,4] 不可以合併。

我們的任務是判斷這些區間是否可以最終合併為乙個閉區間,如果可以,將這個閉區間輸出,否則輸出 「no」。

輸入格式

第一行為乙個整數 nn,3 \le n \le 500003≤n≤50000。表示輸入區間的數量。

之後 nn 行,在第 ii 行上(1 \le i \le n1≤i≤n),為兩個整數 a_ia i 和 b_ib i

​ ,整數之間用乙個空格分隔,表示區間 [a_i, b_i][a i,b i ](其中 1 \le a_i \le b_i \le 100001≤a ≤b i ≤10000)。

輸出格式

輸出一行,如果這些區間最終可以合併為乙個閉區間,輸出這個閉區間的左右邊界,用單個空格隔開;否則輸出 「no」。

輸出時每行末尾的多餘空格,不影響答案正確性

思路:詳細見**,用到了pair,然後有交叉就能合併

#include

using

namespace std;

bool

cmp(pair<

int,

int> p1,pair<

int,

int> p2)

else

}int

main()

sort

(a,a+n,cmp)

; pair<

int,

int> t=a[0]

;bool flag=

true

;for

(int i=

1;i)else

if(t.second < a[i]

.first)}if

(flag==

false

)else

return0;

}

計蒜客 合併石子 區間dp

題目鏈結 題解 leetcode裡面有個戳氣球的題和這個類似,用區間dp來解。由於n堆 n 2 石子合併,最終一定會有個只剩2堆石子的中間狀態,這個狀態就是突破口。最終的2堆石子一定是在原來的石子裡面連續的,可以用dp i j 表示區間i.j的石子合併後最小的體力消耗,n堆石子消耗的最小體力為dp ...

計蒜網鄰接表的使用

這一節我們來複習下前面剛學的鄰接表的使用。給出乙個包含有向圖和無向圖的混合圖 g,圖上有 n 個點和 m 條邊,現在你需要使用鄰接表來儲存該混合圖 g 並按格式輸出鄰接表。輸入第一行為兩個正整數 n 和 m 1 n,m 100 表示混合圖上的 nnn 個點和 m 條邊。接下來輸入 m 行,每行輸入三...

計蒜客 區間包含 活動安排問題

已知 n 個左閉右開區間 a b 對其進行 m 次詢問,求區間 l r 最多可以包含 n 個區間中的多少個區間,並且被包含的所有區間都不相交。輸入格式 輸入包含多組測試資料,對於每組測試資料 第一行包含兩個整數 n m 1 n m 100000 接下來 n 行每行包含兩個整數 a b 0 a b 1...