题目大意:

找出n天中m个安排后1~n中没有安排的天数的最大连续值

思路:

类似于区间合并,不过不用合并这个步骤,只用上个区间的r 和下个区间的l维护ans就行

代码实现:

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
const int N = 1e5 + 10;
typedef pair<int, int> PII;
vector<PII> a;

int main(){
    int n, m;
    cin >> n >> m;
    int l, r;
    for(int i = 1; i <= m; i ++){
        cin >> l >> r;
        a.push_back({l, r});
    }

    sort(a.begin(), a.end());
    int ans = 0;
    int lr = a[0].second;
    for(int i = 1; i < m; i ++){

        if(a[i].first > lr){
            ans = max(ans, a[i].first - lr - 1);
        }
        lr = max(lr, a[i].second);
    }
    ans = max(ans, a[0].first - 1);
    ans = max(ans, n - lr);

    cout << ans << endl;

    return 0;
}