用的是区间合并,如果看完回答十分感谢!
#include <bits/stdc++.h>
using namespace std;
// l表示马路的长度,n表示区域的段数,st,ed表开始结束
int l, n, st, ed;
typedef vector<pair<int, int>> arr;
arr segs;
int func(arr segs)
{
arr temp;
int ans;
sort(segs.begin(), segs.end());
int st = -1e9, ed = -1e9;
for (auto seg : segs)
{
if (ed < seg.first)
{
if (ed != -1e9)
temp.push_back({st, ed});
st = seg.first;
ed = seg.second;
}
else
ed = max(ed, seg.second);
}
if (ed != -1e9)
temp.push_back({st, ed});
for (auto seg : temp)
{
ans += seg.second - seg.first + 1;
}
return ans;
}
int main()
{
cin >> l >> n;
for (int i = 1; i <= n; i++)
{
cin >> st >> ed;
segs.push_back({st, ed});
}
int ans = l + 1 - func(segs);
printf("%d", ans);
return 0;
}