區間合併 模板題

2021-09-25 19:37:36 字數 1107 閱讀 9139

給定 n 個區間 [li,ri],要求合併所有有交集的區間。

注意如果在端點處相交,也算有交集。

輸出合併完成後的區間個數。

例如:[1,3]和[2,6]可以合併為乙個區間[1,6]。

輸入格式

第一行包含整數n。

接下來n行,每行包含兩個整數 l 和 r。

輸出格式

共一行,包含乙個整數,表示合併區間完成後的區間個數。

資料範圍

1≤n≤100000,

−109≤li≤ri≤109

輸入樣例:

5

1 22 4

5 67 8

7 9

輸出樣例:

3
區間的儲存方式:以[左端點,右端點]的形式裝進乙個vector

1.將vector裡面的區間按右端點從小到大排序

2.把vector第乙個區間作為當前的區間[l,r],然後遍歷vector之後的區間[l2,r2],合併好的區間放進vector res

----------2.1 若l2>r,則將[l,r]裝進res,然後當前區間變成[l2,r2]

----------2.2 否則,r變成r2,對區間進行合併,也就是當前區間變成了[l,r2]

3.res的元素為合併好的區間,res的大小就是區間的個數

#include

using

namespace std;

int n;

struct node};

vector ve;

vector

merge()

);l = ve[i]

.l; r = ve[i]

.r;}

else

} resv.

push_back()

;return resv;

}int

main()

);} vector res =

merge()

; cout

return0;

}

區間合併 (模板題)

給定 nn 個區間 li,ri li,ri 要求合併所有有交集的區間。注意如果在端點處相交,也算有交集。輸出合併完成後的區間個數。例如 1,3 和 2,6 可以合併為乙個區間 1,6 輸入格式 第一行包含整數n。接下來n行,每行包含兩個整數 l 和 r。輸出格式 共一行,包含乙個整數,表示合併區間完...

Hotel 線段樹區間合併模板題

有n個車位,一開始全是空的。m個要求,1 k,表示有k輛車要停,且位置要連續,找到編號最小的位置輸出,如果停不下,就輸出0 2 x k,表示從x位置開始,有連續k輛車開走。1代表有空位,0代表沒有空位。tr m left代表從左端點向右,連續1的區間長度,tr m right代表從右端點向左連續1的...

合併石子(區間dp 模板題)

設有n堆沙子排成一排,其編號為1,2,3,n n 300 每堆沙子有一定的數量,可以用乙個整數來描述,現在要將這n堆沙子合併成為一堆,每次只能合併相鄰的兩堆,合併的代價為這兩堆沙子的數量之和,合併後與這兩堆沙子相鄰的沙子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同,如有4堆沙子分別為...