'commit'
This commit is contained in:
33
TangDou/CSP-J/AcWingTraining/T1/422_MergeRange.cpp
Normal file
33
TangDou/CSP-J/AcWingTraining/T1/422_MergeRange.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
typedef pair<int, int> PII;
|
||||
const int N = 110;
|
||||
|
||||
int M, L;
|
||||
PII seg[N];
|
||||
|
||||
int main() {
|
||||
cin >> L >> M;
|
||||
|
||||
for (int i = 0; i < M; i++)
|
||||
cin >> seg[i].first >> seg[i].second;
|
||||
|
||||
sort(seg, seg + M); // 按左端点由小到大排序
|
||||
|
||||
int res = L + 1;
|
||||
int st = seg[0].first, ed = seg[0].second; // 第一个区间
|
||||
for (int i = 1; i < M; i++) // 后面的M-1个区间
|
||||
if (seg[i].first <= ed) // 两个区间有交集
|
||||
ed = max(seg[i].second, ed); // 合并区间
|
||||
else {
|
||||
res -= ed - st + 1; // 独立的两个区间,开始计算去掉的区间长度
|
||||
st = seg[i].first, ed = seg[i].second; // 更新前一个区间的开始与结束,方便下次计算
|
||||
}
|
||||
// 对于最后一个区间而言,它还没有被计算,需要单独计算
|
||||
res -= ed - st + 1;
|
||||
// 输出结果
|
||||
cout << res << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user