給定 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
/vector元素個數即為合併好的區間個數
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堆沙子分別為...