AcWing 803.區間合併
阿新 • • 發佈:2022-05-06
AcWing 803.區間合併
題目描述
給定 n 個區間 [li,ri]
,要求合併所有有交集的區間。
注意如果在端點處相交,也算有交集。
輸出合併完成後的區間個數。
例如:[1,3]
和 [2,6] 可以合併為一個區間 [1,6]。
輸入格式
第一行包含整數 n。
接下來 n
行,每行包含兩個整數 l 和 r。
輸出格式
共一行,包含一個整數,表示合併區間完成後的區間個數。
資料範圍
1≤n≤100000,
−10^9 ≤ li ≤ ri ≤ 10^9
輸入樣例
5
1 2
2 4
5 6
7 8
7 9
輸出樣例
3
題目思路
利用區間和並的思想進行處理
#include<cstdio> #include<iostream> #include<vector> #include<algorithm> using namespace std; typedef pair<int,int> PII; vector<PII> segs; void merge(vector<PII> &segs) { vector<PII> res; sort(segs.begin(),segs.end()); int st = -2e9,ed = -2e9; for(auto seg : segs) { if(seg.first>ed) { if(ed!=-2e9) res.push_back({st,ed}); st = seg.first; ed = seg.second; } else ed = max(ed,seg.second); } if(st!=-2e9) res.push_back({st,ed}); segs = res; } int main() { int n; cin >> n; for(int i=0;i<n;i++) { int l,r; scanf("%d%d",&l,&r); segs.push_back({l,r}); } merge(segs); cout << segs.size() << endl; return 0; }