和 《校门外的树》 是一样的思路,但数据量要稍微大一些

#include <bits/stdc++.h>
using namespace std;

//和 校门外的树 一样
const int N = 1e8 + 5;
int l, m, s[N], a[N];

int main(){
    cin >> l >> m;
    while(m --){
        int x, y;
        cin >> x >> y;
        //构造差分序列
        a[x] ++, a[y + 1] --;
    }
    //求前缀和,值为0即有人
    int ans = (s[0] = a[0]) ? 0 : 1;
    for(int i = 1; i <= l; i ++){
        s[i] = s[i - 1] + a[i];
        if(!s[i]) ans ++;
    }

    cout << ans;
}