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

2 years ago
#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;
}