You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
#include <bits/stdc++.h>
|
|
using namespace std;
|
|
|
|
typedef pair<int, int> PII;
|
|
const int N = 110;
|
|
/*
|
|
500 3
|
|
150 300
|
|
100 200
|
|
470 471*/
|
|
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);
|
|
|
|
// L 代表马路的长度
|
|
int res = L + 1;
|
|
|
|
// ① 第一个区间
|
|
int st = seg[0].first, ed = seg[0].second;
|
|
// ② 从第二个区间枚举
|
|
for (int i = 1; i < m; i++)
|
|
// ③ 枚举到的起点小于等于上一个终点,即有交集
|
|
if (seg[i].first <= ed)
|
|
// ④ 交集分两种情况:(1)新的更长,(2)上一个更长
|
|
ed = max(seg[i].second, ed);
|
|
else {
|
|
// ⑤ 没有了交点,说明断档出现,开始新的区间
|
|
res -= ed - st + 1; // 所L+1中扣掉前一个整体区间的树的个数
|
|
// 全新的区间开始啦
|
|
st = seg[i].first, ed = seg[i].second;
|
|
}
|
|
// ⑥ 上面的逻辑,处理完成后,最后一个没有纳入到计算的范围内,所以需要再次扣除掉
|
|
res -= ed - st + 1;
|
|
cout << res << endl;
|
|
return 0;
|
|
} |