#include using namespace std; typedef pair 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; }