洛谷 P1047 校门外的树

Posted on 2018-09-12 19:28  走三退二  阅读(150)  评论(0)    收藏  举报
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int s[10001];

int main(){
    int L, M;
    cin >> L >> M;
    int l, r;
    for(int i = 0; i < M; i++){
        cin >> l >> r;
        s[l] = max(s[l], r - l + 1);
    }
    int res = L + 1;
    int now = 0;
    for(int i = 0; i <= L; i++){
        now = max(now, s[i]);
        if(now != 0){
            res--;
            now--;
        }
    }

    cout << res << endl;

    return 0;
}

数组s标记了从这点开始之后会有多少个树会被挖掉。

举个例子 比如 200 400和300 350需要挖掉

那么在最后一个for循环的时候

到了200,now会变成201

到了300的时候,res已经被剪掉了101了

s[300]小于now,所以不更新,继续减