首先试的差分,不过前缀和更省事一点
下面是差分代码和前缀和代码

#include<algorithm>
#include<cmath>
#include<numeric>
#include<vector>
typedef long long ll;
using namespace std;

struct s{
	int x,y;
}node[1000005];
bool cmp(s a,s b)
{
	return a.x < b.x;
}
int main()
{
	int l, m;
	cin >> l >> m;
	for (int i = 1; i <= m; i++)
	{
		cin >> node[i].x >> node[i].y;
	}
	sort(node + 1, node + m+1,cmp);
	ll ans = 0;
	int max = -1;
	for (int i = 1; i <= m; i++)
	{
		if (node[i].x <= max)
		{
			if (node[i].y > max)
			{
				ans += node[i].y - max;
				max = node[i].y;
			}
		}
		else
		{
			ans += node[i].y - node[i].x + 1;
			max = node[i].y;
		}
	}
	cout << l+1-ans << endl;
	return 0;
}

前缀和代码:

#include<algorithm>
#include<cmath>
#include<numeric>
#include<vector>
typedef long long ll;
using namespace std;

struct s{
	int x,y;
}node[1000005];
bool cmp(s a,s b)
{
	return a.x < b.x;
}
int main()
{
	int l, m;
	cin >> l >> m;
	int s[100000005] = { 0 };
	for (int i = 1; i <= m; i++)
	{
		int a, b;
		cin >> a >> b;
		s[a] -= 1;
		s[b+1] += 1;
	}
	int ans = 0;
	if (s[0] == 0) ans = 1;
	for (int i = 1; i <= l; i++)
	{
		s[i] += s[i - 1];
		if (s[i] == 0) ans++;
	}
	cout << ans;
	return 0;
}